salut

j'ai un soucis en essayant d'utiliser SeriesCollection. Je l'appelle en tant que m�thode, en lui passant le n� de la Series que je veux. Mais on dirait qu'il ne me donne pas le Series que j'attends, car quoique j'essaie d'en faire (en particulier de consulter sa propri�t� Name), �a ne marche pas. Mais la SeriesCollection n'est pas vide, son Count me retourne 5 !
J'ai aussi essay� d'utiliser SeriesCollection sans param�tre, et en obtenant ensuite la Series voulue d'apr�s la m�thode Item, mais �a ne marche pas mieux :-(
Est-ce que vous avez une id�e ? J'ai pass� l'apr�s-midi � essayer de trouver la solution...
Merci beaucoup pour votre aide !

Voici mon code :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
(...) // j'obtiens un objet Chart valide
IDispatch* pSeries;
VARIANT result;
VariantInit(&result);
VARIANT itemn;
itemn.vt = VT_I4;
itemn.lVal = 2;
m_hr=OLEMethod(DISPATCH_METHOD, &result, pChart, L"SeriesCollection", 1, itemn);
pSeries=result.pdispVal;
VariantInit(&result);
m_hr=OLEMethod(DISPATCH_PROPERTYGET, &result, pSeries, L"Name", 0);
sLegendText = result.bstrVal;
o� OLEMethod (utilis� avec succ�s un peu partour dans mon programme) vient d'un article de CodeProject, il appelle Invoke:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
HRESULT OLEMethod(int nType, VARIANT *pvResult, IDispatch *pDisp,LPOLESTR ptName, int cArgs...)
{
if(!pDisp) return E_FAIL;
 
va_list marker;
va_start(marker, cArgs);
 
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispID;
char szName[200];
 
 
// Convert down to ANSI
WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
 
// Get DISPID for name passed...
HRESULT hr= pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
if(FAILED(hr)) {
return hr;
}
// Allocate memory for arguments...
VARIANT *pArgs = new VARIANT[cArgs+1];
// Extract arguments...
for(int i=0; i<cArgs; i++) {
pArgs[i] = va_arg(marker, VARIANT);
}
 
// Build DISPPARAMS
dp.cArgs = cArgs;
dp.rgvarg = pArgs;
 
// Handle special-case for property-puts!
if(nType & DISPATCH_PROPERTYPUT) {
dp.cNamedArgs = 1;
dp.rgdispidNamedArgs = &dispidNamed;
}
 
// Make the call!
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp, pvResult, NULL, NULL);
if(FAILED(hr)) {
return hr;
}
// End variable-argument section...
va_end(marker);
 
delete [] pArgs;
return hr;
}