VS2010 调试与发布:为什么 STL 列表解释错误



我有一个程序将 stl 列表传递给 dll,当两个模块都处于调试模式时,一切正常。将 dll 更改为释放模式时,传递不再起作用。我在主应用程序(调试版本(中检查了列表,并检查列表大小为 16 字节,立即在 dll 中检查列表大小现在更改为 12 字节。列表中的所有内容都被错误地解释。我检查了编译器选项,并对结构对齐有疑问,但没有得到任何线索。有人可以给我一些提示吗?多谢。

传递结构:

class data
{
int
int
char*
double
}
class datalist
{
int 
int 
int 
list<data> list1
list<data> list2
};

传递机制:

fun(const datalist& dl)

*更多说明:

main app (debug) + dll (debug): work fine
main app (release) + dll (release): does not work
main app (debug) +dll (release): does not work

两个模块使用相同的编译器 VS2010* 编译

您的 DLL 使用的 C++ 标准库版本与应用程序不同,因此每个库都有自己的(不兼容(std::list版本。您必须使用与生成应用程序相同的编译器和配置(Visual Studio 2010 发布(重新生成 DLL。

main app (debug) + dll (debug): work fine
main app (release) + dll (release): does not work
main app (debug) +dll (release): does not work

本机 DLL 是一种非常原始的低级机制。如果应用的编译器和 DLL 具有不同的设置,则任何一方都无法知道另一方正在做出不同的选择。因此,作为开发人员,您必须确保所有内容都兼容。

在调试与发布的情况下,差异通常太大。所以永远不要把这样的事情混为一谈。

对于发布版本无法协同工作的情况,应检查每个项目上的所有编译器/链接器设置,并确保它们兼容(这通常意味着它们完全相同(。

最新更新