基于VS2013 编写带界面的DLL 并实现调用 笔记

本文详细介绍了如何使用MFC创建动态链接库(DLL),包括设置项目属性、定义导出函数、生成DLL文件,以及如何在MFC应用程序中动态加载和调用DLL中的函数,实现界面组件的导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写DLL

1.创建一个MFC DLL,选择“使用共享MFC DLL的规则DLL”,完成

2.运行时库选择:属性-->c/c++-->代码生成-->运行库  “多线程调试 DLL (/MDd)”.好像是默认的

3.项目属性中添加新的MFC类  类名自定义  如IHpDllWin, 选择基类:CDialog,点击完成

4.该动态库中需要实现一个导出函数,该函数返回的是导出界面所属基类的指针。在xxxDlg.cpp中实现导出函数

// 定义导出接口
extern "C" __declspec(dllexport) IHpDllWin* ShowDialog()
{
	// 此处需要加下面这行代码,不然对话框显示不出来。
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	IHpDllWin *ph = new IHpDllWin;
	ph->Create(IHpDllWin::IDD);
	ph->ShowWindow(SW_SHOW);
	return ph;
}

5.点击生成DLL。Debug中出现.dll和.lib

调用DLL

调用dll时使用动态调用的方式

1.创建一个基于对话框的MFC工程

2.将之前生成的.dll和IHpDllWin.h 复制到工程目录下,并添加 #include IHpDllWin.h

3.在响应函数中实现调用

	//1.加载动态库
	HINSTANCE  m_hDll = LoadLibrary(_T("MFCDLL1.dll"));
	if (NULL == m_hDll)
	{
		int ret = GetLastError();
		MessageBox(_T("加载 MyDLL.dll 失败"));
	}

	//2.获取导出函数指针
	typedef IHpDllWin* (*hpDllFun)();
	hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll, "ShowDialog");//获取函数地址
	if (NULL == pShowDlg)
	{
		MessageBox(_T("DLL中函数寻找失败"));
		return;
	}

	//3.获取导出类对象指针
	IHpDllWin* m_hpwin = pShowDlg(); //获取导出窗口类指针,获取了对该导出窗口的控制。

4.生成exe。这时会出现“未定义的标识符IDD=IDD_IHPDLLWIN”。此时需要在IHpDllWin.h头部位置添加定义 #define IDD_IHPDLLWIN  8000

5.再次编译生成exe,可成功连接并弹出对话框

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值