如何在C++应用程序和C++ Win32 DLL之间传递结构体?能否给我一个例子?
std::vector
并期望DLL能够push_back
新元素。原因是DLL通常具有自己的内存管理器和堆,这些与调用者的内存管理器和堆分离(毕竟DLL可以从任何语言调用,不一定是C ++)。std::map
并且只是读取它,DLL也可能不起作用,因为标准库中的某些容器依赖于“哨兵”,并且这些哨兵也可能被复制到DLL。你的struct
是如何定义的?它是POD吗?还是一个简单的C struct
?或者它是一个具有STL类实例成员的struct
?
如果这个struct
是一个“纯C”struct
,那么你可以直接将其传递给DLL。
但是,如果这个struct
具有STL类作为数据成员,那么你必须确保.EXE和.DLL都使用动态链接到CRT,并且使用相同版本的Visual C++编译器和相同类型的CRT进行构建(例如,如果你有一个调试版本的.EXE和一个发布版本的.DLL,则无法在边界处传递STL类,因为STL容器的实现从调试版本到发布版本会发生变化;如果你有一个使用VC10构建的.EXE和一个使用VC9构建的.DLL,则无法在边界处传递STL类)。