zoukankan      html  css  js  c++  java
  • 如何制作带MFC界面的MFC DLL

    最近在做基于组件化MFC界面的开发,需要把界面封装到动态库中。

    一:工程创建步骤
    1.创建MFC DLL工程,选择 “在共享 DLL 中使用 MFC”。
    2.运行时库选择:c/c++-->代码生成-->运行库  “多线程调试 DLL (/MDd)”。
    二:定义导出界面基类
    定义导出界面接口类,待导出界面需要继承该接口类,并实现该接口定义的虚函数。如下:
    class IHpDllWin :public CDialog
    {
    public:
    // 构造函数,ID为窗口资源ID
    IHpDllWin(int id):CDialog(id){}
     
    // 初始化,如客户端网络环境
    virtual void Init(const char* svrip,const int port)=0;
     
    // 清理,如客户端网络环境
    virtual void Finit()=0;
     
    // 显示窗口
    virtual int ShowWin()=0;
     
    // 设置参数
    virtual void SetParam(string p1)=0;
     
    };
    该接口类继承于CDialog,所有导出的界面也只能是对话框,如果需要导出其他类型窗口类,修改该基类继承的窗口类。

    三:定义导出接口
    动态库将定义一个导出函数,该函数返回导出界面基类的指针。在外部获得该导出界面对象指针,可以对该界面进行操作。如:
    下面的导出函数在动态库的app类的实现文件中添加,否则对话框关闭时报断言错误。
    // 定义导出接口
    extern "C" __declspec(dllexport) IHpDllWin* GetSelOrgControl()
    {
    // 切记,此处需要加下面这行代码,不然对话框显示不出来。
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    IHpDllWin *ph = App_SelOrgDlg::instance();
    return ph;
    }
     
    四:调用方式
    采用动态方式调用该动态库,调用步骤如下:
     
      1.加载动态库
      HINSTANCE  m_hDll = LoadLibrary("SelectOrgControl.dll");
    if (NULL == m_hDll)
    {
    MessageBox("加载 SelectOrgControl.dll 失败");
    }
       2.获取导出函数指针
        typedef IHpDllWin* (*hpDllFun)();
        hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll,"GetSelOrgControl");
    if (NULL==pShowDlg)
    {
     
    MessageBox("DLL中函数寻找失败");
    return;
    }
        3.获取导出类对象指针
            IHpDllWin* m_hpwin = pShowDlg();
            获取导出窗口类指针,获取了对该导出窗口的控制。
     
        4.  向导出窗口传递参数
            m_hpwin->SetParam(theApp.m_UsrName.GetBuffer());
        5. 调用导出窗口的初始化函数
    m_hpwin->Init("127.0.0.1",25250);
        6. 显示导出窗口
    m_hpwin->ShowWin();  
       五:卸载动态库
            在使用完之后,调用下面函数卸载动态库:
             FreeLibrary(m_hDll);
  • 相关阅读:
    Flask11 Session、CSRF、注销session、利用端点自动跳转
    python学习笔记4-时间函数
    python学习笔记3-循环1
    python学习笔记2-条件语句
    python学习笔记1-基础语法
    sprintf系列函数
    sscanf非常的重要
    c++中.c_str和.c_data
    c++Map用法
    c语言sscanf总结
  • 原文地址:https://www.cnblogs.com/spplus/p/4499990.html
Copyright © 2011-2022 走看看