欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

非MFC程序如何调用MFC扩展DLL

非MFC程序如何调用MFC扩展DLL

非MFC程序 不可以直接调用mfc extension dll.
如果想这么做,必须加一个中间dll,由中间dll调用mfc extension dll.
如果采用vc. 这个中间dll必须采用 Regular Dll using shared MFC DLL.
需要注意的问题
由于这个中间dll有个CWinApp的派生实例,这个实例::InitInstance可以调用需要初始化的函数(如  AfxEnableControlContainer();,AfxInitRichEdit();) 。 如CDLLApp theApp;这样可以初始化一些afx相关的线程变量;
1.创建另外一个线程(在这称为mfc线程),用下面函数,关键是dlg.DoModal有消息循环。 
void initmyapp(LPVOID lpParam )
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
   CPDllDlg dlg;
  theApp.m_pMainWnd=&dlg;
  dlg.DoModal(); 
}
另外一个线程不致于阻塞主线程(源自非MFC程序调用)调用函数过程。 
由于mfc extension DLL中可能有模态或非模态窗口,需要这个消息循环很重要。
2.mfc中很多过程需要在mfc线程中调用才可以,这样可以用postmessage or sendmessage,
sendmessage(dlg.m_hWnd,msgid,wp,lp), 从主线程转到mfc线程执行。
3.另外mfc extension dll的加载最好在mfc线程用afxloadlibary加载。 
这些方法,也是摸索了一段时间,才找到解决方法。所以不想别人也摸索很久,特意把主要的思路写出来。 
如果大家用此方法有问题,可以邮件联系我。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功