我的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
我不知道您需要什么信息来解决问题。所以只要问您需要的任何东西,我都会提供。
答案 0 :(得分:1)
好吧,我刚刚发现了问题。
dll是由另一个人写的,他在下面写了一些东西
#ifdef _CUSTOM_DATA
#pragma pack(push, 1)
#endif
但是在我的exe中,宏_CUSTOM_DATA未定义,也未从其项目继承。然后,导致结构在编译后具有不同的地址。