Problème d'accés mémoire entre un exe et sa dll
Bonjour,
J'ai un EXE qui utilise une DLL.
Dans mon EXE, j'ai une classe MyClass, j'appelle une fonction function(MyClass *pMyClass) en C située dans la DLL, en lui passant un pointeur pMyClass.
Dans ma fonction je reçois bien le pointeur pMyClass, avec l'adresse correcte de mon objet MyClass.
Lorsque j'accède à un membre de cet objet, je prends un GPF (Global Protection Fault). En effet, bien que l'adresse soit bonne, le membre en question, qui est un pointeur vers un buffer, est NULL.
Dans l'EXE:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| MyClass
{
char *pBuffer;
maMethode();
}
MyClass::maMethode()
{
.......
pBuffer = new char [size];
function(this);
.......
} |
Dans la DLL
Code:
1 2 3 4 5 6
| function(MyClass *pMyClass)
{
........
memcpy(pMyClass->pBuffer, something, sizeof(something));
........
} |
Le pointeur pMyClass est juste, par contre, pMyClass->pBuffer contient NULL
A noter que: En mode Debug, ça fonctionne parfaitement, mais en release, ça plante, comme si l'espace mémoire attribué à l'EXE était différent de celui attribué à la DLL.
Est-ce que quelqu'un aurait une idée sur ce problème?
Merci
Christian
[Résolu:] Problème d'accés mémoire entre un exe et sa dll
C'était un des modules compilé en debug (/Zi) et qui utilisait la DLL multi-threading en mode debug (/MDd). Qui avait échappé à ma vigilance. ;o)