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

news/2024/7/4 1:21:29 标签: dll, mfc, 扩展, class, extension, 测试
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

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



  一、创建MFCclass="tags" href="/tags/KuoZhan.html" title=扩展>扩展DLL

  步骤:

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

  选择Mfc AppWizard(class="tags" href="/tags/DLL.html" title=dll>dll),在右边Project name下输入ExportClass,单击“下一步”;

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

  以上完成建立class="tags" href="/tags/KuoZhan.html" title=扩展>扩展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.class="tags" href="/tags/DLL.html" title=dll>dll复制到系统目录或当前应用程序目录;然后编译就OK了。 


http://www.niftyadmin.cn/n/1536248.html

相关文章

ENOENT: no such file or directory

问题:ENOENT: no such file or directory, open ‘c:\Users\Administrator\Desktop%E4%B9%A6\Vite-%E6%89%93%E5%8C%85%E5%B7%A5%E5%85%B7\my-react-app\src\App.jsx’ 利用vite打包工具,yarn dev启动项目时,报出错误:为发现App.…

kafka consumer 分区reblance算法

转载请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6238029.html 最近需要详细研究下kafka reblance过程中分区计算的算法细节,网上搜了部分说法,感觉比较晦涩且不太易懂,还是自己抠源码比较简便一点。 kafka reblance计算部分代码…

npm全局安装node-sass,安装失败

问题:npm全局安装node-sass安装失败。 原因: 使用npm下载node-sass,可能由于网络问题被墙了。 解决: 利用cnpm全局下载node-sass包 cnpm i -g node-sass

做人做项目

转自 http://blog.csdn.net/phphot/archive/2008/08/31/2857049.aspx 一项目计划: 1.项目计划并不是一边将自己所熟悉的工作内容留给自己一边不停的说这个工作量太大,让MM来协助,你要这样的话我建议你当老总找个秘书。 2.开会: …

IDL是什么?

IDL(Interface Definition Language)即接口定义语言,是CORBA规范的一部分,是跨平台开发的基础。IDL提供一套通用的数据类型,并以这些数据类型来定义更为复杂的数据类型。可变化 IDL 基本类型 整数类型 OMG IDL 摒弃int 类型在不同平台上取值范…

mongoDB4.4版本没有mongodump和mongorestore命令

今天学习MongoDB的过程中,下载了最新4.4版本,在数据库备份和回复过程中发现没有mongodump和mongorestore命令,检查了环境变量配置和安装目录下的bin目录,发现bin目录中并没有对应的mongodump和mongorestore。 又检查了之前4.2版本…

EFCore教程

https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys aspnet core 教程 https://docs.microsoft.com/zh-cn/aspnet/core/ 转载于:https://www.cnblogs.com/shiningrise/p/6242097.html

栅格数据与矢量数据

GIS研究的数据是地理空间数据,这是区别于其他系统的根本原因。栅格数据与矢量数据是地理信息系统中空间数据组织的两种最基本的方式. 栅格数据是以二维矩阵的形式来表示空间地物或现象分布的数据组织方式.每个矩阵单位称为一个栅格单元&#…