建立两个DLL,均选用mfc appwizard(Dll),Dll类型为Mfc Extension DLL.其余默认。第一个DLL建立了如下类,
头文件为AClass.h 
#ifndef ACLASS_H
#define ACLASS_H
class AFX_EXT_CLASS CAClass : public CObject  
{
     DECLARE_DYNAMIC(CAClass)
public:
    CAClass();
    virtual ~CAClass();
};
#endif实现为AClass.cpp#include "stdafx.h"
#include "AClass.h"
IMPLEMENT_DYNAMIC(CAClass,CObject)
CAClass::CAClass()
{}
CAClass::~CAClass()
{}
第二个DLL建立从AClass继承的类
头文件
#ifndef BCLASS_H
#define BCLASS_H
#include "AClass.h"class AFX_EXT_CLASS CBClass : public CAClass  
{
DECLARE_DYNAMIC(CBClass)  //去掉就可以编译过public:
CBClass();
virtual ~CBClass();};#endif
实现文件
#include "stdafx.h"
#include "BClass.h"IMPLEMENT_DYNAMIC(CBClass,CAClass)//去掉就可以编译过CBClass::CBClass()
{}CBClass::~CBClass()
{}
完成后将DLL1用Dependices到DLL2.全编辑DLL2.出现如下连接错误:
BClass.obj : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const  CAClass::classCAClass" (?classCAClass@CAClass@@2UCRuntimeClass@@B)
我查了msdn,我自己的理解是因为在DLL中不能导出CObject类中的静态成员变量不能导出所导致.但想想CObject应该也不可能不支持在多个DLL之间继承.
所以百思不解.附CObject 中的static变量:
其定义可以在Include\afx.h中找到,如下:
#define DECLARE_DYNAMIC(class_name) \
public: \
static const AFX_DATA CRuntimeClass class##class_name; \

解决方案 »

  1.   

    小心翼翼的...... 将
    IMPLEMENT_DYNAMIC(CAClass,CObject)
    从 classa.cpp 移到 classa.h 。
      

  2.   

    #include "stdafx.h"
    #include "asdfa.h"
    #include "BClass.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endifIMPLEMENT_DYNAMIC(CAClass, CObject)
    IMPLEMENT_DYNAMIC(CBClass, CAClass)CBClass::CBClass()
    {}CBClass::~CBClass()
    {}
      

  3.   

    在 BClass.cpp 中 IMPLEMENT_DYNAMIC(CAClass, CObject)
    此时 AClass.h 中的 CAClass::classCAClass 声明只相当于一个 extern 声明