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

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

编译生成成功。

posted @ 2014-03-16 10:17  ONWAYO  阅读(879)  评论(0编辑  收藏  举报