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;
}