MFC|导出dll之导出带页面窗口

256 阅读3分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

今天为大家更新MFC框架下导出带有页面的dll库,相比较前两种单纯导出函数来,略有不同,我来为大家讲解下吧~

功能讲解

1:创建dll

1.1:选择项目工程

MFC动态链接库.png

1.2:扩展类型选择

MFC扩展dll.png

与之前的选择略有不同,带页面的dll导出库,要选择MFC扩展DLL

1.3:创建对话框

经过1.1、1.2两个步骤,一个带有窗口的dll导出库架构已经创建好了,默认的工程是不带对话框的,需要我们手动创建对话框。

找到资源视频,进行图下步骤创建

带页面Dll-添加资源.png

带页面Dll-选择对话框.png

选择Dialog之后,点击新建,就创建出来了。

对话框创建出来之后,就可以添加对应的对话框窗口类。

带页面Dll-添加类.png

假设,创建的对话框类名:CExportDlg

到这里,dll中创建的对话框就完成了,可以做任意想做的事事情,比如说进行界面优化~

2:创建导出类

2.1:声明导出宏

#define INTERRTEST_BUILD
#if defined	(INTERRTEST_BUILD)
#	 define	_InterrTestExport	_declspec(dllexport)
#else
#	 define	_InterrTestExport  _declspec(dllimport)
#endif

这里与导出函数的导出宏是不一样的哦~

2.2:声明导出类

这里导出类就是对外开放的类,与在创建dll时创建的类是不一样的~

假设类名是:CExportDll

该类只是用于外部接口调用方便,CExportDlg类主要做业务处理。并且,CExportDll中调用了CExportDlg类。

首先,创建一个空的导出类

class _InterrTestExport CExportDll
{
public:
    CExportDll();
    ~CExportDll();
};

讲解:对需要导出的类添加导出宏_InterrTestExport,与导出函数方法一致。

其次,需要由该类调用CExportDlg带有对话框的类

对外开放函数:CreateWnd,该函数的具体操作

void CExportDll::CreateWnd(CWnd *pWnd, CRect rect)
{
	CExportDlg *pDlg = new CExportDlg;
	pDlg->Create(IDD_DIALOGOperation, pWnd);
	pDlg->MoveWindow(rect);
	pDlg->ShowWindow(SW_SHOW);
	m_pDlg = pDlg;
}

讲解:m_pDlg是一个成员变量,用于存储创建的CExportDlg指针。

定义:CWnd *m_pDlg;

使用这种方式的好处:不对外开放给用户处理窗口指针,只能通过设定的窗口调用,便于管理。

有人会觉得,除了CreatWnd窗口能使用CExportDlg类指针,其余的函数该如何用呢?

比如:调用一个开始运行的接口

void CExportDll::BeginRunning()
{
    ((CExportDlg*)m_pDlg)->SetStart();
}

讲解:因为导出类中只存储了m_pDlg这个成员变量,在导出类调用函数想要访问CExportDlg该对话框,就需要将m_pDlg指针,转换成CExportDlg类类型才可以,否则是无法访问到的。

3:外部使用

这一步是在应用导出函数的地方进行调用。

3.1:将导出库放置到与exe同一级目录

3.2:在调用程序中进行导出库配置

简单的导出函数是不需要配置的,这里导出页面时,功能复杂,最好采用属性配置的方式,将dll需要的资源配置到工程中。

添加代码配置

带页面Dll-代码属性配置.png

注意:当前程序仅作为测试使用时,附加库目录可以使用绝对路径,但是!当多人开发时,最好采用相对路径,否则,和你一起开发的人也要配置一样的路径才可以,很麻烦~

添加lib库地址

带页面Dll-链接器路径.png

添加lib库文件

带页面Dll-lib文件.png

3.3:代码设置

到这一步,与普通的对话框类使用方式就一样了,不在过多说明了。

今天的更新到这里喽~

我是中国好公民st,一名C++开发程序猿~

本文正在参加「金石计划 . 瓜分6万现金大奖」