从dll返回的类对象在exe中具有不同的大小

时间:2018-11-20 02:11:09

标签: c++ dll

我的DLL和EXE都在同一VS2005中进行编译,并且设置几乎相同(一个解决方案中有两个项目)。 EXE包含DLL使用的相同头文件。

我尝试了两种方法new定义DLL中的对象。一种是直接在EXE中使用new,另一种方式是在DLL中调用静态方法并使用返回的指针。两种方法都有相同的错误结果。

我检查了内存,发现起始地址正确,但是在类中的某个地方,EXE中的大小大于DLL中的大小。也就是说,DLL中返回的成员的地址类似于0x20000060,在EXE中分配该对象后,该地址变为0x20000064。

我所有的课程都使用_declspec(dllexport),顺便说一句。

这是我可以找到的唯一类似问题,但是我不在DLL中使用任何内置类:

Struct size containing vector<T> different sizes between DLL and EXE

我不知道您需要什么信息来解决问题。所以只要问您需要的任何东西,我都会提供。

1 个答案:

答案 0 :(得分:1)

好吧,我刚刚发现了问题。

dll是由另一个人写的,他在下面写了一些东西

#ifdef _CUSTOM_DATA
#pragma pack(push, 1)
#endif

但是在我的exe中,宏_CUSTOM_DATA未定义,也未从其项目继承。然后,导致结构在编译后具有不同的地址。