我有一个VS 2010 C++解决方案,其中包含两个项目,一个生成DLL,另一个是DLL函数的驱动程序。以下所有代码
char cstring [256];
strcpy (cstring, "C String");
std::string string1 = "Test String";
std::string string2 (string1);
std::string string3;
string3.assign (cstring);
在驱动程序中工作良好。但是,如果将相同的代码放置在 DLL 项目中的任何位置,则无法成功为 string1、string2 和 string3 分配任何值。大多数情况下,调试器将它们显示为 Bad Ptr。看起来它们在内存中分配得不好。
我尝试将 std::string 作为类成员字段、自动变量和静态变量放置。但是这些方法都没有按预期工作。谁能帮我找出原因?
我认为原因是缺乏应用程序二进制接口标准(ABI(。这个问题在这篇文章中得到了完美的描述: 如何将对象(尤其是 stl 对象(传入和传出 dll。
它也可能是">> c/c++>>代码生成>>运行时库设置的属性"(/MT 和/MD 设置(,您需要确保库项目和使用项目相同。