MFC项目封装成DLL

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();  
} 





你可能感兴趣的:(MFC,C++)