Salut,
je suis victime d'un plantage (StackOverflow) au moment de faire appel la méthode InvokeHelper pour exécution d'une des fonctions d'un ActiveX.
Methode appelée : (généré par le wizard)
L'ID de la méthode (0x24) est bon, il se réfère à la bonne fonction de l'ActiveX.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 short MonOCX::MaFonction(LPCTSTR DataStr) { short result; static BYTE parms[] = VTS_BSTR; InvokeHelper(0x24, DISPATCH_METHOD, VT_I2, (void*)&result, parms, DataStr); return result; }
En entrée on a une CString (DataStr), seul paramètre, défini dans le tableau de params par VTS_BSTR.
Le type de la valeur de retour (short) est bien défini : VT_I2.
Hors, l'application crash ligne 252 dans oledisp2.cpp au moment d'un SysAllocString()... Mais pourquoi ? Les paramètres sont pourtant correct.
OleDisp2.cpp :
On peut voir que la chaine subit une conversion (vers du wild vraissemblablement) via la macro A2W (ATLCONV.H).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #if !defined(_UNICODE) && !defined(OLE2ANSI) case VT_BSTRA: { LPCSTR lpsz = va_arg(argList, LPSTR); pArg->bstrVal = ::SysAllocString(T2COLE(lpsz)); if (lpsz != NULL && pArg->bstrVal == NULL) AfxThrowMemoryException(); pArg->vt = VT_BSTR; } break; #endif
Le fait que le crash survienne dans les fichiers MFC, ne laisse guère de marge de manœuvre...
Bref, je sèche quant à l'origine de ce crash...
Merci d'avance.
Pierre.
NB:
Config : VC6
Partager