下面是示例代码:
//ColorView.h
class CColorView : public CView
{
public:
    DECLARE_DYNCREATE(CColorView )
}
//ColorView.cpp
IMPLEMENT_DYNCREATE(CColorView , CView)
BEGIN_MESSAGE_MAP(CColorView, CView)
......
END_MESSAGE_MAP()//ShowView.h
class CShowView : public CColorView
{
public:
    DECLARE_DYNCREATE(CShowView)
}
//ShowView.cpp
IMPLEMENT_DYNCREATE(CShowView, CColorView)
BEGIN_MESSAGE_MAP(CShowView, CColorView)
.......
END_MESSAGE_MAP()
但是现在编译时却出现:
--------------------Configuration: Test - Win32 Debug--------------------
Linking...
   Creating library output/Library.lib and object output/Library.exp
ShowView.obj : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CColorView ::classCColorView " (?classCColorView@CColorView@@2UCRuntimeClass@@B)
ShowView.obj : error LNK2001: unresolved external symbol "protected: static struct AFX_MSGMAP const CColorView::messageMap" (?messageMap@CColorView@@1UAFX_MSGMAP@@B)
output/Test.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.PEditor.exe - 3 error(s), 0 warning(s)

解决方案 »

  1.   

    1,在ShowView.h中加入#include "ColorView.h"2,在CColorView.h中加入:
    protected:
    //{{AFX_MSG(CColorView)
    // NOTE - the ClassWizard will add and remove member functions here.
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()3.在CShowView.h中加入:
    protected:
    //{{AFX_MSG(CShowView)
    // NOTE - the ClassWizard will add and remove member functions here.
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
      

  2.   

    谢谢楼上兄弟的回答,但是不正确。因为我现在的定义就是这样的。问题依旧,从错误提示信息来看,应该是CColorView中的DECLARE_DYNCREATE无效??因为说是无法连接struct classCColorView这个RUNTIME_CLASS??哪位高手看看给给答案,哪怕参考也好。我的分不多了,只有40。谢谢。
      

  3.   

    对了,忘了说:CColorShow类是存在于另外一个.dll中的,不是在当前的exe工程中的。
      

  4.   

    呵呵,本问的答案我自己找到了,还是感谢二楼兄弟的回答,我在提醒你的同时,让我自己想到了问题的所在:正因为CColorView类是在.dll中的,而DLL的CLASS如果需要public use或者extends的话,就必须要dllexport,而我直接在CShowView中调用了CColorView.h文件。这当然不对。因为这时候CColorView类的声明还是:
    class __declspec(dllexport) CColorView……………………
    这时候应该要换成class __declspec(dllimport) CColorView…………
    这才正确。呵呵。