现在的位置: 首页 > 综合 > 正文

c++项目属性

2013年06月20日 ⁄ 综合 ⁄ 共 1628字 ⁄ 字号 评论关闭

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

运行时库:

c/c++ run time library(standard c/c++)-->microsoft c/c++ runtime library-->windows api: kernel32.dll, user32.dll, gdi32.dll

microsoft c/c++ runtime library(CRT):
libcmt.lib MT
libcmtd.lib MTD
msvcrt.lib+msvcr80.dll MD
msvcrtd.lib+msvcr90d.dll MDd

http://www.666pc.com/pro/pro/c/2010/0527/54190.html

如果编译选项是mt,mtd, 则生成的exe里包含了runtime lib, 在别的windows机器上也可以跑,不论是否有安装visual studio.

如果编译选项是md,mdd,则生成的exe需要包含msvcm90.dll,msvcr90.dll,msvcp90.dll,Microsoft.VC90.CRT.manifest.在目录Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT。

dll调用动态运行时库,exe调用动态运行时库,可以实现exe中释放dll中开辟的空间
dll调用静态运行时库,exe调用动态运行时库,失败,弹出中断框,windows已在exe中触发一个断点。其原因可能是堆被损坏,这也说明exe中或者它所加载的任何dll中有bug,
dll调用静态运行时库,exe调用静态运行时库,失败,弹出中断框,windows已在exe中触发一个断点。其原因可能是堆被损坏,这也说明exe中或者它所加载的任何dll中有bug,

原因:使用动态运行时库,内部采用同一个堆。静态运行时库分别有自己的堆。

http://dearymz.blog.163.com/blog/static/205657420096675044722/

解决方法:dll内部实现开辟空间和释放空间的接口函数。 多项目使用统一编译现选项。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

mfc的使用:使用标准的windows库

使用静态mfc库,使用动态mfc库的区别:

应用根目录是否要包含D:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.MFC的文件

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

抱歉!评论已关闭.