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

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

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

posted on   闻缺陷则喜何志丹  阅读(39)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~



点击右上角即可分享
微信分享提示