3

我有这种情况,EXE 程序为单个函数调用导入 DLL。它通过传入自定义结构并返回不同的自定义结构来工作。到目前为止,它工作得很好,直到我希望结构数据成员之一成为向量 < MyStruct >

当我在我的程序中执行 sizeof(vector< MyStruct >) 时,我得到的大小为 20,但是当我从 DLL 内部执行时,我得到的大小为 24。这种大小不一致导致 ESP 指针错误。

谁能告诉我为什么 DLL 中的 Vector < MyStruct > 的大小与程序中的大小不同?

我已经重新验证了我在 DLL 和程序中的结构是相同的。

我将不胜感激有关该主题的任何帮助。谢谢你。

4

1 回答 1

1

当类具有 vector<..> 成员并且具有内联构造函数(在头文件中实现)时,我遇到了类似的问题。不管DLL是release还是dll版本,就好像EXE是release版本一样,在EXE中计算的那个类的大小比在DLL中少3个字节,因此堆栈会被破坏。

可以通过以下更改之一解决此问题:

  • 它只发生在 VC98(SP6) 上。换成VS2008,问题就消失了。

  • 将内联构造函数移至 CPP 文件,问题也消失
    了。

我希望有人可以帮助给出更详细的解释。

于 2011-09-02T07:28:38.370 回答