c++ MFC规则DLL的创建和显式调用

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

猜你喜欢

转载自blog.csdn.net/dxm809/article/details/113960633
今日推荐