码迷,mamicode.com
首页 > 其他好文 > 详细

std::wstring跨dll 崩溃

时间:2015-08-01 23:33:39      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

今天用个测试exe调用了个dll,有个接口返回std::wstring,经调试发现挂在该函数return之后,怀疑是string不适合作为返回值,百度一番发现下面这篇解释的很详细。

STL跨平台调用会出现很多异常,你可以试试.
STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。
原因分析:
一句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出跨执行单元访问它的代码。 除非你能够确定两个动态库使用的都是同样的STL实现,比如都使用VC同一版本的STL,编译选项也一样。强烈建议,不要在动态库接口中传递STL容器!!
STL不一定不能在DLL间传递,但你必须彻底搞懂它的内部实现,并懂得为何会出问题。

std::map std::set mfc的CMap在VC6下也有类似问题。 据说有的开发环境没问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。

std::wstring跨dll 崩溃

标签:

原文地址:http://blog.csdn.net/he_zhidan/article/details/47192683

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!