[转] string和动态链接库——不仅仅如此
来源:互联网 发布:软件防止破解 编辑:程序博客网 时间:2024/06/02 06:38
动态链接库是一种常用的技术,但是在和string共用的时候,通常会出现一些问题。网络上有一种说法是因为动态链接和静态链接方式不同的缘故。这样的说法经过测试好像是不对的。我测试结果是和使用的库有关。
在测试中,使用了多种组合,发现在动态链接库和exe文件都使用动态链接的运行时库就没有问题了。这个问题究竟出在什么地方呢?
我开始认为是多线程导致string的问题,但在明显的单线程Demo中也有问题,实验结果是静态连接C Run-time Library导致了这个问题。从网上收集到的信息很有限。比较有说服力的一个说法是在静态连接C Run-time Library的时候导致运行堆不是唯一的,因为导致删除出错。在DLL中分配的内存在exe中删除时,遇到的问题是一样的。这里是一个不太确切的说法,希望有人能给出详细介绍。
1 string和动态链接库——不仅仅如此
2 c++ 动态库中回调函数慎用string及容器
因而在主程序与动态库之间定义了一个共同的结构,结构里面存在这string及诸如vector,list数组,这下问题就出来了,由于使用回调函数时,结构体变量在动态库中定义,而在主程序中赋值使用,这下问题就来了,说string释放出错,访问了非法的地址,让我一顿好整,先是把string预先分配空间,如tmpstr.assgn(30, 0);的确这样是好用,但却要严格的控制赋值时不能超过这个长度,因为string超过就会自动分配新空间,以前的空间丢丢弃了,这时又跟以前一样,这个问题解决了,但又出现一个新的问题,就是vector释放不了,郁闷,开始还人为是string的问题,就将string改成了固定空间的字符数组,但结果问题依然存在,没办法了,只好多折腾。
像string类型及vector动态的空间,都是在赋值时分配空间的,这样就会导致在主程序中分配空间,而到动态库中释放,就会释放不了.
不需要 __declspec(dllexport) ,因为类成员信息已经内嵌于程序集中,不需要”导出“
0 0
- [转] string和动态链接库——不仅仅如此
- string和动态链接库——不仅仅如此
- 经历不仅仅如此简单!!!
- 动态链接和动态链接库
- 静态链接库和动态链接库(转)
- 静态链接库和动态链接库(转)
- 静态链接库和动态链接库(转)
- 静态链接库和动态链接库(转)
- 【转】Lib静态链接库和Dll动态链接库
- 静态库链接、动态库静态链接和动态链接
- 动态链接库之静态链接和动态链接
- 动态链接库—优点
- Linux编程简介——静态链接库和动态链接库
- 静态链接库和动态链接库
- 静态链接库和动态链接库
- 静态链接库和动态链接库
- 动态链接库和静态链接库
- 静态链接库和动态链接库
- 如何开发出一款仿映客直播 APP 项目实践篇 -【采集篇 】
- NJFU比赛部分题解
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
- 5.4的加载场景时调用api
- MySql查询昨天和今天的数据datediff()函数
- [转] string和动态链接库——不仅仅如此
- Docker到底是什么?
- 获得桌面工作区
- 11.28
- 使用ant运行testng使用testng-results.xsl美化结果
- centos 6.4 6.5安装搭建pptp vpn服务
- Toolbar menu item 显示icon
- docker中文部分文档
- 深度优先与广度优先