-
-
[原创]非MFC程序如何调用MFC扩展DLL
-
发表于:
2012-4-3 14:10
11641
-
非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加载。
这些方法,也是摸索了一段时间,才找到解决方法。所以不想别人也摸索很久,特意把主要的思路写出来。
如果大家用此方法有问题,可以邮件联系我。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)