dll中接口中使用std::string和std::vector

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangqi_gsts/article/details/81542694

最近在windows下封装dll给客户,接口参数类型都是std::string,直接在release模式下生成,客户也没什么反馈。但是自己线下在debug模型下测试的时候参数始终传递不过去,调试觉得内存很诡异。

结果就是:

STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。

原因分析:
一 句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出跨执行单元访问它的代码。 除非你能够确定两个动态库使用的 都是同样的STL实现,比如都使用VC同一版本的STL,编译选项也一样。强烈建议,不要在动态库接口中传递STL容器!!

猜你喜欢

转载自blog.csdn.net/zhangqi_gsts/article/details/81542694