zoukankan      html  css  js  c++  java
  • MFC扩展DLL

          准备把自绘Combo Box控件单独封装到DLL类中,尝试使用“使用共享MFC DLL的规则DLL”建立项目,总是无法找到XXX.lib,最终发现应该使用“MFC扩展DLL”类型建立DLL项目。现将过程总结如下:

          1. 建立MFC对话框程序:MFC_Test;

          2. 在MFC对话框程序解决方案中添加新建项目,建立“MFC扩展DLL”类型的MFC_DllTest项目DLL_Test;

          3. 在DLL_Test中添加类——Test,编译器自动建立Test.h、Test.cpp文件,在头文件中,将AFX_EXT_CLASS关键字添加到类的声明中,如下所示:

    class AFX_EXT_CLASS Test : public CWnd {...}

    (AFX_EXT_CLASS语义参见http://blog.csdn.net/kenkao/article/details/7872644

    4. 自定义函数:在头文件中添加自定义函数声明:

    public:
    void                    MyTest();

    在源文件中写入定义:

    void Test::MyTest()
    {
         MessageBox(L"Hello!");
    }

    5. 在MFC_DllTest对话框程序头文件MFC_DllTestDlg.h中添加DLL头文件:

    #include "Test.h"

    此时编译将出现“Test.h”文件未找到错误,

    解决方案:设置MFC_DllTest项目属性

    (PS:也可以将这个头文件拷贝到对话框文件夹中)

    在MFC_DllTestDlg.h中声明Test类:

    public:
    Test  mTest;

    MFC_DllTestDlg.cpp中添加按钮事件

    {

    mTest.MyTest();

    }

    编译会出现无法解析外部符号的错误:

    error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall Test::~Test(void)" (__imp_??1Test@@UAE@XZ)
    1>MFC_DllTestDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall Test::Test(void)" (__imp_??0Test@@QAE@XZ),该符号在函数 "public: __thiscall CMFC_DllTestDlg::CMFC_DllTestDlg(class CWnd *)" (??0CMFC_DllTestDlg@@QAE@PAVCWnd@@@Z) 中被引用

    解决方案:在对话框项目属性中设置链接器输入附加依赖项

    编译生成成功。

  • 相关阅读:
    dumpsys
    阿里云云效流水线体验
    停车入场城市排行榜1
    第三方企业号对接工作
    PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)
    十大编程算法助程序员走上高手之路
    数据库的最简单实现
    JavaScript 开发的45个经典技巧
    常用meta整理
    Shell脚本编程初体验
  • 原文地址:https://www.cnblogs.com/onwayo/p/3603058.html
Copyright © 2011-2022 走看看