2010-05-19 56 views
3

予有这种情况,其中一个EXE程序导入一个DLL用于一个函数调用之间 不同的尺寸。它的工作原理是传入一个自定义结构并返回一个不同的自定义结构。到现在为止它的工作很好,直到我想要的结构数据成员之一,是一个矢量< MYSTRUCT> STRUCT尺寸含有载体DLL和EXE

当我做的sizeof(矢量< MYSTRUCT>)在我的计划,我得到一个大小为20,但是当我做它从DLL内部获得24的大小。这种大小不一致导致ESP指针错误。

谁能告诉我,为什么一个Vector < MYSTRUCT>将在DLL中的不同尺寸比计划?

我已经重新验证我的DLL和程序两个结构是相同的。

我希望关于这个问题的任何帮助。谢谢。

+1

都是二进制建以同样的方式(例如调试与发布)?有些类在调试时有额外的填充以帮助调试和不变检查。 – 2010-05-19 03:36:21

+0

其实很奇怪的是,当我将EXE切换到释放时,它们变成了相同的字节大小。我不知道为什么发布版本会比Debug版本更大。 – 2010-05-19 03:57:09

回答

1

我满足当类具有矢量< ..>构件类似的问题,并且具有内嵌构建函数(在头文件实现)。 无论DLL是release还是dll版本,就好像EXE是发布版本一样,在EXE中计算出来的那个类的大小比在DLL中小3个字节,这样堆栈就会被销毁。

这个问题可以通过固定以下变化之一:

  • 这只是与VC98(SP6)发生。更改为VS2008,问题消失。

  • 将嵌入式构造函数移动到CPP文件,问题也消失
    了。

我希望有人能帮忙给出更详细的解释。