如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现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了。
原文:http://www.vckbase.com/index.php/wv/1199
|