3 votes

Structure contenant un vecteur<T> de tailles différentes entre DLL et EXE

Je suis dans une situation où un programme EXE importe une DLL pour un appel de fonction unique. Cela fonctionne en passant dans une structure personnalisée et en retournant une autre structure personnalisée. Jusqu'à présent, cela a bien fonctionné jusqu'à ce que je veuille qu'un des membres des données de la structure soit un vecteur < MyStruct >.

Lorsque je fais un sizeof(vector< MyStruct >) dans mon programme, j'obtiens une taille de 20, mais lorsque je le fais depuis la DLL, j'obtiens une taille de 24. Cette incohérence de taille provoque une erreur de pointeur ESP.

Quelqu'un peut-il me dire pourquoi un Vector < MyStruct > aurait une taille différente dans la DLL que dans le programme ?

J'ai vérifié que mes structures dans la DLL et le programme sont identiques.

J'apprécierais toute aide sur le sujet. Merci.

1voto

Chime Points 26

Je rencontre un problème similaire lorsque la classe a un membre vector<..>, et avec une fonction de construction en ligne (implémentée dans le fichier d'en-tête). Peu importe que la DLL soit une version release ou dll, si l'EXE est une version release, la taille de cette classe calculée dans l'EXE est inférieure de 3 octets à celle de la DLL, et la pile sera donc détruite.

Ce problème peut être résolu par l'une des modifications suivantes :

  • Cela ne s'est produit qu'avec VC98(SP6). Si vous passez à VS2008, le problème disparaît.

  • Déplacer la fonction de construction en ligne vers le fichier CPP, le problème disparaît.
    aussi.

J'espère que quelqu'un pourra m'aider à donner une explication plus détaillée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X