使用std::string 通过dll接口传递时,应该注意的问题
来源:互联网 发布:淘宝上宝贝排名靠前 编辑:程序博客网 时间:2024/05/18 00:38
问题描述:
在一个lib库中用到了另外一个库的dll,lib库的运行时库是“多线程DLL(/MD)”,(属性 C/C++ ->代码生成->运行库),dll工程使用的运行库是“多线程调试DLL(/MDd)”。导致向dll的接口传递std::string参数时报错。
解决方法:
将lib项目的运行库改为“多线程调试DLL(/MDd)”.
原因分析:
不同的模块各自有一份C运行时库代码、或者根本没有C运行时库,导致了各个模块会有各自的堆。如果在A堆中申请空间,到B堆中释放就会有崩溃,在模块A申请的空间,必须在模块A中释放。
以STL的string为例,通过修改编译选项验证了这个问题。string在赋值的时候需要释放掉原来的内存空间,然后再申请新的内存空间存储新的内容,如果跨模块了,释放的时候就存在“A模块申请B模块释放”的问题,导致程序崩溃。
当程序中有多个模块时,必须保证所有模块使用的C运行时库是一致的。
0 0
- 使用std::string 通过dll接口传递时,应该注意的问题
- 使用std::string时,注意的两点
- C++ 在DLL中使用std::string乱码的问题
- 跨DLL传递std::string
- 写dll应该注意的问题
- smarty向js传递变量时应该注意的问题
- ssh 使用时应该注意的问题
- 接口回调应该注意的问题
- 使用std::sort需要注意的问题
- dll接口中使用string问题
- 使用std::string::find() 和 std::string::npos需要注意的地方
- 关于std::string的使用问题
- std::string 内存管理特别,多线程使用时应注意
- std::string 内存管理特别,多线程使用时应注意
- 在Symbian中编写DLL应该注意的问题
- VS2005下写DLL应该注意的问题
- 接口的使用注意问题
- 接口的使用注意问题
- Windows 7中的“帮助和支持”无法打开怎么办?
- Debug your Java code with ease using JPDA
- Android_编程开发规范
- 20160108HTML学习笔记html的四大基本结构
- C#实现SFTP文件传输
- 使用std::string 通过dll接口传递时,应该注意的问题
- 华为机试——删除一个字符串中出现次数最少的字符
- DML、DDL、DCL区别 .
- oracle impdp/expdp 的权限问题
- java字符分割
- 安卓弹出提示显示框
- java MVC
- 外牌年检车辆在上海办理年检
- Xcode7免证书真机调试