我的DLL和EXE都是在同一个VS2005中编译的,具有几乎相同的设置(一个解决方案中有两个项目(。EXE包含与DLL使用的头文件相同的头文件。
我尝试了两种方法来new
一个在DLL中定义的对象。一种是直接在EXE中的new
,另一种是调用DLL中的静态方法并使用返回的指针。两种方法都有相同的错误结果。
我检查了内存,发现起始地址是正确的,但在类的某个地方,EXE中的大小比DLL中的大。也就是说,DLL中返回的成员的地址类似于0x20000060,在EXE中分配该对象后,该地址变为0x20000064。
我的所有课程都使用_declspec(dllexport)
,BTW.
这是我能找到的唯一类似的问题,但我在DLL中没有使用任何内置类:
包含向量的结构大小<T>DLL和EXE 之间的大小不同
我不知道你需要什么信息来解决这个问题。所以只要你需要什么,我就会提供。
好吧,我刚刚发现了问题。
dll是由另一个人写的,他在下面写了一些东西
#ifdef _CUSTOM_DATA
#pragma pack(push, 1)
#endif
但在我的exe中,宏_CUSTOM_DATA没有定义,也没有从他的项目中继承。然后它会导致结构在编译后具有不同的地址。