一步一步实现MFC扩展DLL中导出类和对话框

如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框。

一、创建MFC扩展DLL

步骤:

运行Visual Studio 6.0->File->New...->Projects;

选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击“下一步”;

选择Mfc Extension DLL (using share MFC DLL) 单击“finish”;

以上完成建立扩展DLL的框架,下面接着建立输出类:

Insert-> New Class...在打开的对话框中,"Class Type" 选择"Generic Class",Class Name 中输入CDogClass(当然你可以用其它的名称,我喜欢小狗,所有用它了,在"Base Class"下输入CObject,然后"OK";

为类添加两个测试用的变量 int m_nNum;CString m_sData;完全的类信息如下:

DogClass.h头文件:

01. class CDogClass : public CObject
02. {
03. private :
04.    int m_nNum;
05.    CString m_sData;
06. public:
07.    int ShowDlg();
08.    void Init();
09.    CDogClass();
10.    virtual ~CDogClass();
11.    void SetNum(int num) { m_nNum = num;};
12.    int GetNum() { return m_nNum; };
13.    void SetData(CString data) { m_sData = data;};
14.    CString GetData() { return m_sData; };
15. };

DogClass.cpp实现文件:

01. CDogClass::CDogClass()
02. {
03.    Init();
04. }
05.   
06. CDogClass::~CDogClass()
07. {
08. }
09.   
10. void CDogClass::Init()
11. {
12.    m_nNum = 0;
13.    m_sData = "";
14. }

编辑DogClass.h头文件修改下面一行;

1. class AFX_EXT_CLASS CDogClass : public CObject

以上完成类的建立,下面建立输出对话框;

Insert-> Resouce...新建立一个对话框,添加两个编辑框IDC_EDIT1,IDC_EDIT2,然后建立CDlgDog对话框类并为两编辑框添加int m_nNum和CString m_sData的变量。

在DogClass.cpp的#include "DogClass.h"下加入#include "DlgDog.h"

在DogClass类中添加int ShowDlg();函数用来调用对话框,并在int CDogClass::ShowDlg()中添加如下代码:

01. CDlgDog dlg;
02. dlg.m_nNum = GetNum();
03. dlg.m_sData = GetData();
04. if (IDOK==dlg.DoModal())
05. {
06.     SetNum(dlg.m_nNum);
07.     SetData(dlg.m_sData);
08.     return 1;
09. }
10. return 0;      

然后编译Dll,会发现有几个错误,不用怕,好解决的,首先,去掉DlgDog.cpp中的 #include “\ add additional includes here”这一行;其次,在stdax.h中加入include "resource.h",再编译,OK。

二、建立DLL 测试程序

步骤:

新建一个基于对话框的MFC应用程序,添加一按钮IDC_BUTTON1,并在按钮事件中添加如如下代码:

01. void CTestExportClassDlg::OnButton1()
02. {
03.    CDogClass dog;
04.   
05.    dog.Init();
06.    if (dog.ShowDlg()!=0)
07.   {
08.      CString str;
09.      str.Format("Num is: %d Data is: %s" dog.GetNum(), dog.GetData());
10.      AfxMessageBox(str);
11.   }
12. }      

从ExportClass文件目录拷贝DogClass.h和ExportClass.lib文件到测试程序目录下;

在TestExportClassDlg.cpp中加入#include “DogClass.h”行;往连接程序的导入库中添加ExportClass.lib,在VS的Project->Settings下的Setting For选择All Configuration.,然后在下面的页面Object/Library Conttrol中加入ExportClass.lib;

别忘了把ExportClass.dll复制到系统目录或当前应用程序目录;然后编译就OK了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值