在一个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()
};