本文正在参加「金石计划 . 瓜分6万现金大奖」
今天为大家更新MFC框架下导出带有页面的dll库,相比较前两种单纯导出函数来,略有不同,我来为大家讲解下吧~
功能讲解
1:创建dll
1.1:选择项目工程
1.2:扩展类型选择
与之前的选择略有不同,带页面的dll导出库,要选择MFC扩展DLL。
1.3:创建对话框
经过1.1、1.2两个步骤,一个带有窗口的dll导出库架构已经创建好了,默认的工程是不带对话框的,需要我们手动创建对话框。
找到资源视频,进行图下步骤创建
选择Dialog之后,点击新建,就创建出来了。
对话框创建出来之后,就可以添加对应的对话框窗口类。
假设,创建的对话框类名: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需要的资源配置到工程中。
添加代码配置
注意:当前程序仅作为测试使用时,附加库目录可以使用绝对路径,但是!当多人开发时,最好采用相对路径,否则,和你一起开发的人也要配置一样的路径才可以,很麻烦~
添加lib库地址
添加lib库文件
3.3:代码设置
到这一步,与普通的对话框类使用方式就一样了,不在过多说明了。
今天的更新到这里喽~
我是中国好公民st,一名C++开发程序猿~
本文正在参加「金石计划 . 瓜分6万现金大奖」