[OLE2/ActiveX] Crash sur appel à InvokeHelper
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)
Code:
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;
} |
L'ID de la méthode (0x24) est bon, il se réfère à la bonne fonction de l'ActiveX.
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 :
Code:
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 |
On peut voir que la chaine subit une conversion (vers du wild vraissemblablement) via la macro A2W (ATLCONV.H).
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