_USRDLL和_AFXDLL的用法

参考案例: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());

 

你可能感兴趣的:(_USRDLL,_AFXDLL,_WINDLL)