导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

在一个MFC EXE项目中继承MFC扩展项目中的类

rr12 2010-07-15 02:32:27
在MFC扩展DLL中,CDialog1从CDialog派生,并有一个对话框资源。

在使用该扩展DLL的MFC EXE项目中,CDialog2从CDialog1派生。

生成时:

Error 1 error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CDialog1::classCDialog1" (?classCDialog1@CDialog1@@2UCRuntimeClass@@B) Dialog2.obj ExtDll_2_tester




代码:

Dialog1.h:


#pragma once

#include "resource.h"


// CDialog1 dialog

class __declspec(dllexport) CDialog1 : public CDialog
{
DECLARE_DYNAMIC(CDialog1)

public:
CDialog1(CWnd* pParent = NULL); // standard constructor
virtual ~CDialog1();

// Dialog Data
enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

DECLARE_MESSAGE_MAP()
};





// Dialog1.cpp : implementation file
//

#include "stdafx.h"
#include "Dialog1.h"


// CDialog1 dialog

IMPLEMENT_DYNAMIC(CDialog1, CDialog)

CDialog1::CDialog1(CWnd* pParent /*=NULL*/)
: CDialog(CDialog1::IDD, pParent)
{

}

CDialog1::~CDialog1()
{
}

void CDialog1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CDialog1, CDialog)
END_MESSAGE_MAP()


// CDialog1 message handlers




Dialog2.h:


#pragma once

#include "Dialog1.h"
#pragma comment(lib,"ExtDll_2.lib")

// CDialod2

class CDialog2 : public CDialog1
{
DECLARE_DYNAMIC(CDialog2)

public:
CDialog2();
virtual ~CDialog2();

protected:
DECLARE_MESSAGE_MAP()
};





// Dialod2.cpp : implementation file
//

#include "stdafx.h"
#include "ExtDll_2_tester.h"
#include "Dialog2.h"

#include "Dialog1.h"
#pragma comment(lib,"ExtDll_2.lib")

// CDialod2

IMPLEMENT_DYNAMIC(CDialog2, CDialog1)

CDialog2::CDialog2()
{

}

CDialog2::~CDialog2()
{
}


BEGIN_MESSAGE_MAP(CDialog2, CDialog1)
END_MESSAGE_MAP()



// CDialod2 message handlers






MFC EXE项目中引入的Dialog1.h:


#pragma once

#include "resource.h"

#pragma comment(lib,"ExtDll_2.lib")

// CDialog1 dialog

class CDialog1 : public CDialog
{
DECLARE_DYNAMIC(CDialog1)

public:
CDialog1(CWnd* pParent = NULL); // standard constructor
virtual ~CDialog1();

// Dialog Data
// enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

DECLARE_MESSAGE_MAP()
};
...全文
22 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
头文件肯定是引用的,这是个未知符号错误,看看有没有把dll的lib加入到工程中,或者添加到工程linker-》Input-》Additional Dependency中
回复
cpp2017 2010-07-15
这个class要标记为导出.
回复
运动健将 2010-07-15
ExtDll_2_tester里面可能没引用那个报错的函数吧.h文件
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……