dll动态链接库(4)---MFC规则DLL

发布时间:2016-12-9 19:50:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"dll动态链接库(4)---MFC规则DLL",主要涉及到dll动态链接库(4)---MFC规则DLL方面的内容,对于dll动态链接库(4)---MFC规则DLL感兴趣的同学可以参考一下。

1、MFC规则DLL特点: ●DLL内部可以使用MFC类库; ●可以被其他所有支持DLL技术的语言所调用。 2、MFC规则DLL的入口点函数: 默认情况下DLL的入口点函数都是DllMain,MFC规则DLL也不例外,但是因为是支持MFC的,所以在MFC规则DLL中,DllMain函数已经被MFC所封装,所以在你的工程中是看不到DllMain函数的,就好像在MFC对话框工程中你找不到WinMain函数一样的,不过也有一些补救的技巧,就是InitInstance()与ExitInstance()函数,当进程初始化调用DLL时,DLL中会默认调用那个InitInstance()函数,当EXE退出时DLL会调用ExitInstance()函数,但是当有新线程时,处于程序安全性考虑则没有什么好的办法进行处理。 3、MFC规则DLL分为两类: ●静态链接到MFC的规则DLL:与MFC库静态链接,会将MFC类库的代码直接编译生成到DLL文件中,在调用这种DLL的接口时,MFC使用DLL的资源,因此,不需要模块状态的切换,但是缺点就是使用这种方式生成的DLL文件大小比较大。 ●动态链接到MFC的规则DLL:可以和调用DLL的EXE同时动态链接到MFC库,在这种情况下,MFC使用主应用程序(即:EXE程序)的资源句柄来加载资源模版,这样,当DLL和应用程序中存在相同ID的资源时,就要进行模块的切换,以便MFC能够找到正确的资源模版。 4、MFC规则DLL的模块状态切换: 三种方法: ①AFX_MANAGE_STATE(AfxGetStaticModuleState());  ② HINSTANCE hSaveInst = AfxGetResourceHandle(); // 取得当前应用程序的句柄 AfxSetResourceHandle(theApp.m_hInstance); // 获取dll的实例句柄 ... ... //执行语句; AfxSetResourceHandle(hSaveInst); ③ HINSTANCE hExeInst = GetModuleHandle(NULL); HINSTANCE hDLLInst = GetModuleHandle(_T("MFCDLL.dll")); ASSERT(hExeInst && hDLLInst); AfxSetResourceHandle(hDLLInst); ... ... //执行语句; AfxSetResourceHandle(hExeInst); ★最方便的还是第一种方法,前两种是在DLL导出函数中进行添加,第三种是在EXE程序中进行添加。

上一篇:算法导论笔记第一章
下一篇:RSA算法详解与举例

相关文章

相关评论