一步一步实现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头文件:

class CDogClass : public CObject
{
private :
  int m_nNum;
  CString m_sData;
public:
  int ShowDlg();
  void Init();
  CDogClass();
  virtual ~CDogClass();
  void SetNum(int num) { m_nNum = num;};
  int GetNum() { return m_nNum; };
  void SetData(CString data) { m_sData = data;};
  CString GetData() { return m_sData; };
};
DogClass.cpp实现文件:
CDogClass::CDogClass()
{
  Init();
}
CDogClass::~CDogClass()
{
}
void CDogClass::Init()
{
  m_nNum = 0;
  m_sData = "";
}   
编辑DogClass.h头文件修改下面一行;
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()中添加如下代码:

CDlgDog dlg;
dlg.m_nNum = GetNum();
dlg.m_sData = GetData();
if (IDOK==dlg.DoModal())
{
  SetNum(dlg.m_nNum);
  SetData(dlg.m_sData);
  return 1;
}
return 0;    
然后编译Dll,会发现有几个错误,不用怕,好解决的,

首先,去掉DlgDog.cpp中的 #include “\ add additional includes here”这一行;其次,在stdax.h中加入include "resource.h",再编译,OK。

二、建立DLL 测试程序

步骤:

新建一个基于对话框的MFC应用程序,添加一按钮IDC_BUTTON1,并在按钮事件中添加如如下代码:
void CTestExportClassDlg::OnButton1()
{
  CDogClass dog;
  dog.Init();
  if (dog.ShowDlg()!=0)
 {
   CString str;
   str.Format("Num is: %d Data is: %s" dog.GetNum(), dog.GetData());
   AfxMessageBox(str);
 }
}    
从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了。

时间: 2024-11-08 22:32:30

一步一步实现MFC扩展DLL中导出类和对话框的相关文章

MFC扩展DLL中导出类和对话框的实现方法_C 语言

本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考.具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 程序运行结果如下图所示: 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWiz

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

如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击"下一步": 选择Mfc Exte

Delphi从Dll中导出类

从Dll中导出类 ,想必大家首先想到的是使用 bpl 包.这种方式有一个不好 ,那就是使用者必须清楚这个包中含有那些类 ,也就是说必须知道类的名字 -- 这在一定意义上是个限制 ,试想一种情况 ,使用者定义了一个底层的抽象类 (abstract class),然后在此基础上定义了许多应用类 (concrete class),那么 ,对于使用者来说 ,他希望在不知道具体有哪些类的情况下能使用这些类 -- 这 么说似乎有些玄 ,但实际情况确实如此 ,因为定义抽象类的时候并不能预料到以 后会有多少个具

静态.共享的规则MFC DLL/MFC扩展DLL详解

引言:在编写MFC程序的时候,通常需要编写dll库以供其他程序调用.关于MFC dll的相关知识很多很杂,这里特酷吧结合自己学习中遇到的问题专门整理了一些MFC dll的基础知识.本部分共上下两篇文章,本文为上篇,MFC DLL应用程序类型分为以下三种:(1)使用共享MFC DLL的规则DLL(2)带静态链接MFC的规则DLL(3)MFC扩展DLL下面重点解释一下这些DLL的含义区别:一,规则DLL首先谈谈所谓的"规则DLL":"规则DLL"是由"Regu

VC++动态链接库编程之MFC扩展 DLL

  MFC扩展DLL与MFC规则DLL的相同点在于在两种DLL的内部都可以使用MFC类库,其不同点在于MFC扩展DLL与应用程序的接口可以是MFC的.MFC扩展DLL的含义在于它是MFC的扩展,其主要功能是实现从现有MFC库类中派生出可重用的类.MFC扩展DLL使用MFC 动态链接库版本,因此只有用共享MFC 版本生成的MFC 可执行文件(应用程序或规则DLL)才能使用MFC扩展DLL. 从前文可知,MFC规则DLL被MFC向导自动添加了一个CWinApp的对象,而MFC扩展DLL则不包含该对象

怎样从一个DLL中导出一个C++类

原文作者:Alex Blekhman    翻译:朱金灿   原文来源: http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx 译文来源:http://blog.csdn.net/clever101     C++语言毕竟能和Windows DLLs能够和平共处.     介绍          自从Windows的开始阶段动态链接库(DLL)就是Windows平台的一个组成部分.动态链接库允许在一个独立的模块中封装一系列

如何在Dll中导出STL类

简介:本文详述在DLL中导出stl类及包含stl的类的方法.例子源码 Dll无法直接导出泛型模板(generalized template),因此,如果要导出stl类,则模板必须先实例化(instantiated).另外,如果导出的STL类使用了其他STL类,那么这些其他类必须同时被导出.目前stl中唯一能够被导出的容器是vector,其他容器(如map.set.queue.list.deque)都因包含嵌套类而不能被导出. 导出STL类的步骤: 在Dll和exe文件中,用同样版本的c运行库链接

Regular DLL(MFC规则DLL)、MFC...Extension DLL(MFC扩展DLL 区别

.Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用. b.Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的.明显的特点是在源文件里有一个继承CWinApp的类.其又可细分成静态连接到MFC和动态连接到MFC上的. 静态连接到MFC的动态连接库只被VC的专业般和企业版所支持.该类DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程

MFC的dll中控制资源问题

有程序EXE和DLL,其中DLL中有1个函数用来显示对话框,被EXE调用.当EXE和DLL都为Release或Debug时,没有任何问题,但EXE为Release.DLL为Debug时,就会出错.该DLL是用VC提供的MFC Extension DLL,函数的代码如下:HINSTANCE hInstOld = AfxGetResourceHandle(); // 该句出错HINSTANCE hInstNew = GetModuleHandle("T01Test.dll");AfxSet