随笔 - 833  文章 - 1  评论 - 106  阅读 - 200万

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

 

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

2006-03-02 15:54作者:江上飞鸟出处:vckbase责任编辑:方舟

 

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

 

posted on   3D入魔  阅读(514)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2010-05-14 OpenGl函数库
2010-05-14 sscanf,scanf,fscanf与正则表达式(转帖)
< 2012年5月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示