1.准备:①已经测试好的MFC项目解决方案(WinForm1);
②新建一个MFC的DLL解决方案(WinDLL);
③新建一个MFC对话框工程(DlgTest);
2.复制MFC项目目录下(.Cpp、.H、.rc、res等)到DLL项目目录下,其中需要修改rc名字为DLL项目名,(.rc是存储MFC资源的文件,res文件夹一般存储需要添加的图片之类)
有时编译无法通过提示 error RC2135 可能是rc编译问题:
1.需要关闭rc文件,在资源管理器中打开rc文件,另存为unicode格式的文件。
2.具体要是要根据 错误后面的提示信息进行处理。
3.由于WinForm1的下有个继承CWinApp的类可以直接删除,把XXXXXDlg.h和XXXXXXDlg.cpp的包含头文件改为当前项目下继承CWinApp。
为什么呢?
因为CWinApp隐含WinMain()入口
4.在WinDLL.Cpp下添加代码
extern "C" __declspec(dllexport) void ShowDlg(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());//为了保证代码准确 防止调用失败
CXXXXXDlg dlg;
dlg.DoModal();
}
//不了解extern "C" __declspec(dllexport) 可以百度下,这里简单解释下
--declspec(dllexport)是把导出数据
--declspec(dllimport)是导入数据
还有.def文件下添加函数的导出,可以看看MSDN的介绍,和大神们的讲解。
LIBRARY "XXX" ;dll生成名
EXPROTS ;导出函数名
myFunction1 @1 ;标号需要自己去看看资料
myFunction2 @2
PS:如果遇见CDialogEx是未定义基类,修改为CDialog即可,是因为没能查找到CDialogEx.h的缘故。
5.在测试工程(DlgTest)中添加一个按钮事件,添加一下代码,记得把dll复制到工程目录下
HINSTANCE hDll; //DLL句柄 hDll = LoadLibrary(_T("XXXXDLL.dll")); //加载dll if (NULL == hDll) { MessageBox(_T("DLL加载失败")); } else { FARPROC proc; proc = GetProcAddress(hDll,"ShowDlg");//调用dll函数 proc(); }