Tutorial :Struct size containing vector different sizes between DLL and EXE



Question:

I have this situation where an EXE program imports a DLL for a single function call. It works by passing in a custom structure and returning a different custom structure. Up till now it's worked fine until I wanted one of the structs data members to be a vector < MyStruct >

When I do a sizeof(vector< MyStruct >) in my program I get a size of 20 but when I do it from inside the DLL I get a size of 24. This size inconsistency is causing a ESP pointer error.

Can anyone tell me why a Vector < MyStruct > would be a different size in the DLL than in the program?

I have reverified that my structs in both the DLL and the Program are identical.

I would appreciate any help on the subject. Thank you.


Solution:1

I meet similar issue when the class has a vector<..> member, and with an inline construct function(implemented in header file). No matter DLL is release or dll version, as if as EXE is release version, size of that class calculated in EXE is 3 byte less than in DLL, thus the stack will be destroyed.

This problem can be fixed by one of below change:

  • It's only occured with VC98(SP6). Change to VS2008, issue disappears.

  • Move the inline construct function to CPP file, issue disappears
    too.

I hope someone can help to give a more detailed explanation.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »