MD和MT混用的后果

本文涉及的产品
语种识别,语种识别 100万字符
文档翻译,文档翻译 1千页
图片翻译,图片翻译 100张
简介: MD和MT混用的后果

dll操作stl对象时(如:std::stringstd::vector)崩溃,原因:在不同堆中申请、释放内存。如果一个dllstl为主要类库,这种情况必定发生。主要分如下几类:

1,导出函数出参使用了stl对象。

2,导出了类,此类有公有成员。可以通过笨办法解决,不设置公有变量,通过SetGet函数操作成员,工作量巨大。

 

1VC6 Debug测试崩溃的情况。

被调用方(dll)

调用方(exe)

是否崩溃

MDd

MDd

正常

MD

正常

MTd

崩溃

MT

崩溃

MD

MDd

正常

MD

MD

正常

MD

MTd

崩溃

MD

MT

崩溃

MTd

MTd

崩溃

Mt

崩溃

MDd

崩溃

MD

崩溃

MT

MTd

崩溃

Mt

崩溃

MDd

崩溃

MD

崩溃

结论:除了双方都是MDMDd,必定崩溃。

 

2VC6 Release版,不考虑MDdMTd

被调用方(dll)

调用方(exe)

是否崩溃

MD

MD

正常

MT

MD

正常

MD

MT

正常

MT

MT

正常

结论:双方都是Release版,不会崩溃。

 

3,开发环境VC6,被调用方Release版,调用方Debug版。

这种情况很常见,比如:使用第三方组件,第三方组件往往没Debug版,所以调试时,只能用Release版。

被调用方(dll)

调用方(exe)

是否崩溃

MD

MTd

崩溃

MDd,

崩溃

MT

MTd

崩溃

MDd

崩溃

结论:必定崩溃。

 

4,VC8(VS2005)Debug

被调用方(dll)

调用方(exe)

是否崩溃

MDd

MDd

正常

MDd

MTd

崩溃

MTd

MTd

崩溃

MTd

MDd

崩溃

5,VC8(VS2005)Release

被调用方(dll)

调用方(exe)

是否崩溃

MT

MT

崩溃

MT

MD

崩溃

MD

MT

崩溃

MD

MD

正常

6VC8(VS2005)被调用方Release,调用方Debug

被调用方(dll)

调用方(exe)

是否崩溃

MD

MD

崩溃

无需实验

 

终上所述:

Debug版都是MDdRelease版都是MD,才不会崩溃。


相关文章
|
1月前
|
Linux 数据安全/隐私保护 Windows
aes加密在linux下会生成随机key的解决办法
aes加密在linux下会生成随机key的解决办法
29 2
|
1月前
|
弹性计算 运维 Shell
|
8月前
|
JavaScript 数据安全/隐私保护 Python
JS逆向 -- 某视频vurl值的加密分析
JS逆向 -- 某视频vurl值的加密分析
162 0
|
1月前
|
Android开发 数据安全/隐私保护
安卓逆向 -- FridaHook分析3DES加密值
安卓逆向 -- FridaHook分析3DES加密值
30 0
安卓逆向 -- FridaHook分析3DES加密值
|
10月前
MD5值对比辨别文件是否改动
去年自己写了一个对比MD5值以此来辨别文件是否被改动,UI和代码有点拉,初学者
58 0
|
1月前
|
数据安全/隐私保护
|
8月前
|
JavaScript 安全 数据安全/隐私保护
JS逆向 -- 分析某站buvid3和_uuid的加密过程
JS逆向 -- 分析某站buvid3和_uuid的加密过程
120 0
|
8月前
|
JavaScript 数据安全/隐私保护
JS逆向 -- 某新闻数据包中sign值加密分析
JS逆向 -- 某新闻数据包中sign值加密分析
60 0
|
8月前
|
JavaScript 数据安全/隐私保护 开发者
JS逆向 -- 某视频val值和pid值的加密分析
JS逆向 -- 某视频val值和pid值的加密分析
60 0