我是靠谱客的博主 合适高跟鞋,最近开发中收集的这篇文章主要介绍mfc dll 小记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前段时间用MFC做一个微型电子白板,之后因为功能需求,需要改成dll模式。
在尝试过程中 我首先将单文档模式改成mfc单文档的dll,修改过程大约增加对rc文件的认识
resouce.h 是rc文件的头文件 rc文件包含了整个工程的 对话框 位图 图标 工具栏等资源 和资源大小 风格 属性 等信息

1 注释:注释格式和C语言相同,单行注释使用//符号。多行注释使用/××/符号。
2 预处理命令:预处理指令包括一些头文件的引用(使用#include,也和C语言相同)
3 编译指令:预定义(#define,常量和宏,  不支持带参数的宏)和条件编译(#if,#ifdef,#undef,#ifndef,#else,#elif,#endif等)
4 资源定义说明:资源定义的声明包括“资源”(Resources),“控件”(Controle),“声明”(Statement)3类
资源迁移的时候 直接把前一个项目的资源迁移过来 然后把代码文件拷贝过来
但是 在单文档dll 退出的时候遇到问题 参见  http://bbs.csdn.net/topics/391996063
后来又在对话框模式下作了一个,画图板用了一个 继承自CView 类的 面板。画图类还是之前的画图类
在将dlg 到 dll 的时候 遇到另外一个问题。
将dlg 的资源 迁移到 mfcdll 项目之后编译没问题 但是运行的时候报错
HWNDCDataExchange::PrepareCtrl(intnIDC)
{
 ASSERT(nIDC!=0);
 ASSERT(nIDC!=-1);//notallowed
 HWNDhWndCtrl;
 COleControlSite*pSite=NULL;
 m_pDlgWnd->GetDlgItem(nIDC,&hWndCtrl);
 if(hWndCtrl==NULL)//这里返回的是NULL
 {
 //CouldbeawindowlessOCX
  pSite=m_pDlgWnd->GetOleControlSite(nIDC);
  if(pSite==NULL)
  { 
   TRACE(traceAppMsg,0,"Error:nodataexchangecontrolwithID0x%04X.n",nIDC);
   ASSERT(FALSE);
   AfxThrowNotSupportedException();
  } 
 }
 m_idLastControl=nIDC;
 m_bEditLastControl=FALSE;//notanedititembydefault
 returnhWndCtrl;
}

因为 m_pDlgWnd->GetDlgItem(nIDC,&hWndCtrl); 找的是主项目控件ID 所以 在调用的时候需要注意模块状态
切换
MFC规则DLL分为两类:
●静态链接到MFC的规则DLL:与MFC库静态链接,会将MFC类库的代码直接编译生成到DLL文件中,在调用这种DLL的接口时,MFC使用DLL的资源,因此,不需要模块状态的切换,但是缺点就是使用这种方式生成的DLL文件大小比较大。
15:10 2016/10/11。
MFC规则DLL的模块状态切换:
三种方法:
①AFX_MANAGE_STATE(AfxGetStaticModuleState());
② HINSTANCE hSaveInst = AfxGetResourceHandle();
 AfxSetResourceHandle(theApp.m_hInstance);
 ... ... //执行语句;
 AfxSetResourceHandle(hSaveInst);
③ HINSTANCE hExeInst = GetModuleHandle(NULL);
 HINSTANCE hDLLInst = GetModuleHandle(_T("MFCDLL.dll"));
 ASSERT(hExeInst && hDLLInst);
 AfxSetResourceHandle(hDLLInst);
 ... ... //执行语句;
 AfxSetResourceHandle(hExeInst);
★最方便的还是第一种方法,前两种是在DLL导出函数中进行添加,第三种是在EXE程序中进行添加。

最后

以上就是合适高跟鞋为你收集整理的mfc dll 小记的全部内容,希望文章能够帮你解决mfc dll 小记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部