zoukankan      html  css  js  c++  java
  • 实现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了。

  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3459349.html
Copyright © 2011-2022 走看看