1 新建MFC动态链接库Dll2
如图选择使用共享MFC DLL的常规DLL
2 修改对话框资源如图
3 为该对话框绑定类CRegularDllDlg,头文件加入下面引用,否则无法找到CDIalogEx
#include <afxdialogex.h>
4 实现Show按钮的事件
void CRegularDllDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox(_T("MFC规则DLL"), _T("Regular DLL"), MB_OK);
}
5 在Dll2.cpp里面添加引用
#include "CRegularDllDlg.h"
在Dll2.cpp里面添加导出函数
extern "C" __declspec(dllexport) void ShowDlg(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CRegularDllDlg regularDllDlg;
regularDllDlg.DoModal();
}
6新建一个MFC对话框项目TestMFCRegularDLL,为CTestMFCRegularDLLDlg添加成员变量
HINSTANCE m_hLib;
7 在对话框上面放一个按钮
8 在CTestMFCRegularDLLDlg.cpp最上面添加下面代码
typedef void (*pShowDlg)();
pShowDlg pShowDlgProc = NULL;
9 在CTestMFCRegularDLLDlg::OnIntialDialog()添加下面代码
// TODO: 在此添加额外的初始化代码
TCHAR exeFullName[MAX_PATH];
::GetModuleFileName(AfxGetInstanceHandle(), exeFullName, MAX_PATH);
CString strFileName = exeFullName;
int nPos = strFileName.ReverseFind('\\');
if (nPos > 0)
{
strFileName = strFileName.Left(nPos);
strFileName += _T("\\Dll2.dll");
m_hLib = ::LoadLibrary(strFileName);
if (m_hLib == NULL)
{
AfxMessageBox(_T("加载DLL失败,请查看DLL2.dll是否存在"));
}
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
10 实现显示按钮事件
void CTestMFCRegularDLLDlg::OnBnClickedBtnShowmsg()
{
// TODO: 在此添加控件通知处理程序代码
if (m_hLib != NULL)
{
pShowDlgProc = (pShowDlg)::GetProcAddress(m_hLib, "ShowDlg");
if (pShowDlgProc == NULL)
{
AfxMessageBox(_T("请查看Dll2.dll是否正确"));
return;
}
pShowDlgProc();
}
}