参考案例:http://coolerbaosi.iteye.com/blog/1779525 (推荐博客:http://coolerbaosi.iteye.com/ )
参考文档:http://computer-programming-forum.com/82-mfc/d277aca893dd77cb.htm
参考文档:http://blog.csdn.net/honker110/article/details/6120810
参考文档:http://blog.lehu.shu.edu.cn/byman/A333883.html
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源
常见的编译参数VC建立项目时总会定义
例如:"Win32", "_WIND64"指示编译出32/64位的程序/dll.
例如:控制台程序会定义"_CONSOLE",否则会定义"_WINDOWS"。
例如:Debug版定义"_DEBUG",Release版定义"NDEBUG"
例如:_WINDLL 表示用到MFC的DLL
MFC的库的链接方式有两种,一种是静态链接到MFC库,一种是动态链接到MFC库。
静态链接的MFC的情况下,MFC的库中带有_DllMain函数的定义。
动态链接到MFC的情况下,MFC不带_DLLMain定义。
选项说明:
_USRDLL:静态方式链接MFC库,这样子的话本身MFC的库中带有_DllMain函数的定义
_AFXDLL:动态方式链接到MFC库,这样子的话,调用侧dll需要自己定义_DllMain入口函数
从上面的说明中可以看出:
1. 当我们使用CWinApp这种方式的话,需要使用_USRDLL
2. 当我们自己dll中定义了_DllMain的话,需要时_AFXDLL
附件一点:作为MFC的dll,涉及MFC资源切换,
1. 一种是自己做切换:
a. 在dll加载时,获取dll的resource instance(_USRDLL时在InitInstance中,_AFXDLL时在_DLLMain的DLL_PROCESS_ATTACH时获取)
b.在导出函数的开始位置,设置resource instance,结束时再设置回原来的resource instance
2. 另一种是使用MFC的
宏切换方法,再导出函数的开始位置,执行:AFX_MANAGE_STATE(AfxGetStaticModuleState());