/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
运行时库:
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的文件
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////