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

编写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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用Qt生成界面的动态链接库(DLL)供C/C++调用时,可以按照以下步骤进行: 1. 创建Qt工程:首先,使用Qt Creator创建一个新的Qt工程。选择Qt Widgets应用程序模板,并选择导入外部库,并选择动态创建库。在项目设置确保选择“构建为库”选项,以便生成DLL文件。 2. 在Qt工程编写界面代码:使用Qt提供的UI设计器在Qt工程编写相应的界面代码。可以使用QWidget、QMainWindow等类创建需要的窗口,并通过布局管理器来安排部件的位置。 3. 实现界面逻辑:在Qt工程,根据需要实现相应的界面逻辑。可以通过信号和槽机制实现界面部件之间的交互,也可以在所需的界面编写相关函数进行处理。 4. 生成DLL文件:在Qt Creator,选择构建菜单的“构建”选项,编译和生成Qt工程。生成的DLL文件将会保存在指定的构建目录。 5. 将DLL文件供C/C++调用:在C/C++项目,通过导入生成的DLL文件进行调用。在C/C++代码,使用动态链接库相关的函数和结构体来加载DLL,并调用的函数。 需要注意的是,在导出函数时,需要使用`__declspec(dllexport)`将要导出的函数标记为可导出的,以便在DLL被C/C++代码调用。 总结起来,生成界面DLL给C/C++调用的关键步骤为:创建Qt工程、编写界面代码和实现界面逻辑、生成DLL文件,以及将DLL文件供C/C++代码调用。通过这些步骤,就可以成功生成界面DLL给C/C++调用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值