std::wstring跨dll 崩溃

简介: std::wstring跨dll 崩溃

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


STL跨平台调用会出现很多异常,你可以试试.

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

原因分析:

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

STL不一定不能在DLL间传递,但你必须彻底搞懂它的内部实现,并懂得为何会出问题。


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


相关文章
|
2月前
|
存储 安全 算法
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
134 1
|
2月前
|
存储 安全 程序员
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
123 0
|
2月前
|
编译器 C语言 C++
C++ 中使用 `<bits/stdc++.h>` 的利与弊
C++ 中使用 `<bits/stdc++.h>` 的利与弊
98 2
|
2月前
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
101 0
|
9月前
|
C++
MFC exe使用C++ dll中的std::string 崩溃
MFC exe使用C++ dll中的std::string 崩溃
|
9月前
|
C++
std::string 不能跨dll的一种解决方法
std::string 不能跨dll的一种解决方法
|
9月前
|
C++
VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题
VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题
VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误
VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误
|
10月前
|
C++
C++11特性之std:call_once介绍
std:call_once是C++11引入的新特性,如需使用,只需要#include <mutex>即可,简单来说std:call_once的作用,确保函数或代码片段在多线程环境下,只需要执行一次,常用的场景如Init()操作或一些系统参数的获取等。
150 0
|
iOS开发 MacOS
MacOS Clion 使用<bits/stdc++.h>万能头提示 fatal error: ‘bits/stdc++.h‘ file not found
MacOS Clion 使用<bits/stdc++.h>万能头提示 fatal error: ‘bits/stdc++.h‘ file not found
800 0