最近在windows下封装dll给客户,接口参数类型都是std::string,直接在release模式下生成,客户也没什么反馈。但是自己线下在debug模型下测试的时候参数始终传递不过去,调试觉得内存很诡异。
结果就是:
STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。
原因分析:
一 句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出跨执行单元访问它的代码。 除非你能够确定两个动态库使用的 都是同样的STL实现,比如都使用VC同一版本的STL,编译选项也一样。强烈建议,不要在动态库接口中传递STL容器!!
本文探讨了在Windows环境下使用DLL时遇到的问题,特别是当接口参数为std::string时,在Debug模式下出现的数据传递失败现象。文章深入分析了根本原因——STL模板在不同执行单元间的不一致性,并提出了相应的解决建议。
1482

被折叠的 条评论
为什么被折叠?



