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

  • 相关阅读:
    centos7 rc.local 开机不执行
    springboot与tomcat中GZip压缩
    使用Nginx对Websocket进行反向代理
    spring-data-redis 关于订阅客户端不断创建新线程的问题
    使用apache.tika判断文件类型
    简单理解TCP通信的三次握手
    logback异步输出日志(生产者消费者模型),并非批量写入日志。
    将文本(lrc,txt)文件转换成UTF-8格式
    docker入门(三)
    Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/2499573.html
Copyright © 2011-2022 走看看