• 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) 中被引用

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

    编译生成成功。

  • 相关阅读:
    用__new__ 创建单例模式
    函数的列表作为默认参数
    循环闭包函数打印列表
    斐波那契函数和回调函数
    类的共享属性
    字典和format用法
    python 面试大全: 01_类变量在内部是作为字典处理的
    git 学习删除某次提交
    mysql调优
    re模块
  • 原文地址:https://www.cnblogs.com/onwayo/p/3603058.html
Copyright © 2020-2023  润新知