VS2015动态库编程之MFC规则动态库(上)

文章相关视频教程下载地址http://pan.baidu.com/s/1mhNKRg8

通过VS2015不但可以创建基于Win32的动态库程序,还可以创建基于MFC的动态库程序。在基于MFC的动态库中,可以使用MFC类。

1 分类

MFC动态库分为规则动态库和扩展动态库。在规则动态库中,可以使用MFC类,但是其导出函数或类不能是MFC的;而扩展动态库则可以导出MFC的派生类。

对于MFC规则动态库,其链接方式分为静态链接和共享链接。静态链接指的是将MFC库的代码直接链接到DLL文件中,该DLL文件中包含了很多未使用的MFC库,因此使用静态链接方式生成的DLL文件所占的空间较大。动态链接并没有将MFC库代码链接到DLL中,而是在用到该MFC库时才会对该库进行链接,使用动态方式连接的DLL文件所占空间较小,但是在使用时需要进行模块切换。

2 静态链接的MFC规则动态库

2.1 创建动态库

VS2015的“新建项目”对话框中左侧选择“已安装->模板->Visual C++->Windows->MFC”,在右侧选择“MFC DLL”,并且在“名称”中设置该动态库的名称“MFC_Regular_Static_DLL_Test”如图1所示。

 

1 选择MFC DLL

接下来,在“MFC DLL向导对话框中选择DLL类型”为“带静态链接MFC的规则DLL”,如图2所示。

 

2 选择DLL类型

2.2 编写动态库

在创建的MFC_Regular_Static_DLL_Test.cpp”源文件中,可以看到消息映射宏和全局变量app类的对象theApp,以及程序的“入口函数”InitInstance()函数。

在该动态库中,主要完成导出函数的定义,在该导出函数中,显示MFC的对话框资源。

2.2.1 对话框资源及类的添加

MFC动态库中导入对话框资源的方法与在MFC程序中导入对话框资源的方法相同。在“资源视图”中点击“MFC_Regular_Static_DLL_Test.rc”,在右键菜单中选择“添加资源”,之后在弹出的“添加资源”对话框中的“资源类型”选择“Dialog”,点击右侧的“新建”按键,为动态库添加对话框资源。

之后,选择添加的对话框资源,在右键菜单中选择“添加类”,为该对话框资源添加对应的类。在弹出的“MFC添加类向导”对话框中将“类名”设置为“CDllDialog”,其对应的文件分别为DllDialog.hDllDialog.cpp,如图3所示。

 

3 为对话框资源添加类

2.2.2 导出函数的定义

MFC_Regular_Static_DLL_Test.cpp中定义导出函数:

extern "C" _declspec(dllexport)void ShowDialog(void)

{

CDllDialog dlg;

dlg.DoModal();

}

该函数的作用是弹出新添加的对话框。为了能够使用CDllDialog类,需要在MFC_Regular_Static_DLL_Test.cpp中包含声明该类的头文件

#include "DllDialog.h"

之后就可以对MFC_Regular_Static_DLL_Test项目进行编译,生成MFC_Regular_Static_DLL_Test.libMFC_Regular_Static_DLL_Test.dll两个文件了。

2.3 加载动态库

新建一个基于Win32控制台的程序,将该程序命名为“Use_MFC_Regular_Static_DLL_Test”。在该程序中,使用动态加载的方式来加载MFC_Regular_Static_DLL_Test.dll动态库。(动态加载动态库的详细方法见VS2015 Win32动态库的使用”)

HINSTANCE hDll = LoadLibrary(_T("MFC_Regular_Static_DLL_Test.dll"));

if (hDll == NULL)

{

return 1;

}

lpFun pShowDialog = (lpFun)GetProcAddress(hDll,"ShowDialog");

if (pShowDialog == NULL)

{

return 1;

}

pShowDialog();

FreeLibrary(hDll);

其中,lpFun为定义的函数指针:

typedef void(*lpFun)(void);

最后,将MFC_Regular_Static_DLL_Test.dll拷贝到Win32程序的源文件目录中。运行的结果如图4所示,黑框为Use_Regular_Static_DLL_Test程序,弹出的对话框为Regular_Static_DLL_Test动态库中的对话框。

 

4 Win32程序调用MFC动态库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值