如果要编写模块化的软件,就要对对动态链接库(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了。

转载于:https://www.cnblogs.com/chenzuoyou/p/3459349.html

实现MFC扩展DLL中导出类和对话框相关推荐

  1. DLL入门浅析(4)——从DLL中导出类

    前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了. DLL头文件: #ifndef _DLL_SAMPLE_H #de ...

  2. MFC制作DLL(导出类和函数)

    学了2天MFC导出DLL,发现网上描述的都不是很彻底,我这里给一个教程,希望大家能参考一次成功. 我用VC6,其他版本基本雷同. 首先,VC6新建项目,如下图流程: 点击文件–保存工作空间,把我们的劳 ...

  3. VC++6 开发MFC扩展DLL以及MFC DLL可以包含界面

    VC环境可以开发win32 DLL和MFC DLL:下面来开发一个MFC DLL:Win7, VC6: 新建一个MFC exe工程:名为mfcddd:在同级目录下新建一个文件夹,名为mfcbin: 默 ...

  4. VC++动态链接库(DLL)编程(四)――MFC扩展 DLL

    VC++动态链接库(DLL)编程(四) ――MFC扩展 DLL 作者:宋宝华  e-mail:21cnbao@21cn.com   前文我们对非MFC DLL和MFC规则DLL进行了介绍,现在开始详细 ...

  5. MFC扩展DLL添加对话框资源时对话框ID是“未声明标识符”

    1 问题提出 在MFC扩展DLL中添加对话框资源后,为该对话框资源添加对应的类之后,编译程序会显示"error C2065: "IDD_DIALOG1":未声明的标识符& ...

  6. DLL中导出函数的声明有两种方式

    本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...

  7. DLL入门浅析(3)——从DLL中导出变量

    前面介绍了怎么从DLL中导出函数,下面我们来看一下如何从DLL中导出变量来. 声明为导出变量时,同样有两种方法:    第一种是用__declspec进行导出声明 #ifndef _DLL_SAMPL ...

  8. MFC的DLL中实现定时器功能

    方法一:创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了.DWORD WINAPI TimerThread(LPVOID pamaram) { UINT oldTic ...

  9. dll的概念、dll导出类(转)

    1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接库与 ...

  10. C++ DLL总结—静动态调用、导出类

    1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接库与 ...

最新文章

  1. iOS 实现点击微信头像效果
  2. java学习笔记(2)
  3. visual studio installer正在提取文件_并非危言耸听,赶紧检查自己网盘内的私密文件...
  4. java个人所得税计算_java个人所得税计算器 | 学步园
  5. Swift - 12 - 区间运算符和for-in
  6. android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异
  7. jvm_垃圾收集算法讲解(一)
  8. Spring中的用到的设计模式大全
  9. idea安装sbt插件linux,【idea】kafkasbt+idea安装配置与测试
  10. java中mvc事务_Spring MVC 事务配置
  11. AndroidStudio Git 更改gitlab 地址
  12. mysql主从配置对解决并发有用_MySQL主从配置,读写分离
  13. 【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP)
  14. 小米9se无法连接adb的问题
  15. 00截断上传绕过_Getshell | 文件上传绕过整理
  16. 专题:固体力学中应力与应变分析详解(4.应力张量的转换)
  17. 树莓派简单摄像头录像并保存视频文件
  18. 【页面置换】页面置换算法的设计
  19. 百度云服务器BCC 调用百度人工智能API失败的解决方法
  20. 【SQLSERVER 2000】由于数据移动,未能继续以 NOLOCK 方式扫描

热门文章

  1. Java SE 基础:List 集合列表
  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-2.微服务下登录检验解决方案 JWT讲解...
  3. 黄老师架构师课程笔记(一)反射
  4. tensorflow 变量共享
  5. 【转】解决“你没有权限访问,请与网络管理员联系”
  6. 集合代码----小练习3
  7. OpenSift源代码编译过程记录
  8. ASP.NET中用healthMonitor属性用法
  9. 【msdn】配置 ReportViewer 以进行远程处理
  10. 为.net开发者提供的一份关于存储过程的评论(转载)