我遇到这种情况,EXE程序为单个函数调用导入DLL。它通过传递自定义结构并返回不同的自定义结构来工作。到目前为止,它一直工作正常,直到我希望其中一个结构数据成员为向量< MyStruct>
当我在我的程序中执行sizeof(vector< MyStruct>)时,我得到20的大小但是当我从DLL内部执行它时,我得到24的大小。这个大小不一致导致ESP指针错误。
任何人都可以告诉我为什么Vector< MyStruct> DLL中的大小与程序中的大小不同吗?
我已经重新验证了DLL和程序中的结构是相同的。
我很感激有关这个问题的任何帮助。谢谢。
答案 0 :(得分:1)
当类有一个向量< ..>时,我遇到类似的问题成员,并具有内联构造函数(在头文件中实现)。 无论DLL是release还是dll版本,就像EXE是发布版本一样,EXE中计算的类的大小比DLL小3个字节,因此堆栈将被破坏。
可以通过以下更改之一解决此问题:
这只发生在VC98(SP6)上。更改为VS2008,问题消失。
将内联构造函数移动到CPP文件,问题消失了 太
我希望有人可以提供更详细的解释。