Bonjour,
J'ai écrit un petit prog qui load un ocx que j'ai également écrit.
Cet Ocx contient notament la fonction suivante:
ensuite dans mon application appelante je me link à mon ocx et j'appel ma fonction comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part VARIANT_BOOL CConversAPICtrl::TstDbl_bool(DOUBLE* pInDouble)
sachant que InvokeMethode est écrit comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 VARIANT aVarParams[1]; for(int i = 0; i < 1; i++) VariantInit(&aVarParams[i]); aVarParams[0].vt = VT_R8; aVarParams[0].dblVal = 653220; if(FAILED(InvokeMethod(g_pConversAPI, L"TstDbl_bool", aVarParams, 1, NULL))) cerr<< "Error TstDbl_bool failed !"<<endl;
le problème se situe au return de pDispatch->Invoke il me renvoi Type Mismatch ?
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 HRESULT InvokeMethod(IDispatch* pDispatch, DISPID methodid, VARIANT aVarParams[], int nParamCount, VARIANT* pVarRes) { // paramètres de l'appel à Invoke (ordre des paramètres inversé) VARIANTARG* rgvarg = NULL; if(nParamCount > 0) { rgvarg = new VARIANTARG[nParamCount]; for(int i = 0; i < nParamCount; i++) rgvarg[nParamCount-i-1] = aVarParams[i]; } // initialisation structure DISPPARAMS; DISPPARAMS dispparams = {rgvarg, NULL, nParamCount, 0}; // appel de Invoke HRESULT hr = pDispatch->Invoke(methodid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparams, pVarRes, NULL, NULL); // libération mémoire if(nParamCount > 0) delete[] rgvarg; // retour return hr; }
Quelqu'un aurait une idée sur ce problème
merci d'avance
Partager