有两个DLL,GraphDll和RectDll。
在GraphDll中,Graph的定义如下
class AFX_EXT_CLASS CGraph : public CObject
{
    DECLARE_DYNCREATE(CGraph);
public:
    CGraph();
    virtual ~CGraph();
    virtual void Draw(CDC* pDC, BOOL bSec);
};
IMPLEMENT_DYNCREATE(CGraph, CObject)在RectDll中,CRectangle的定义
class AFX_EXT_CLASS CRectangle : public CGraph
{
    DECLARE_DYNCREATE(CRectangle);
public:
    CRectangle();
    virtual ~CRectangle();
    virtual void Draw(CDC* pDC, BOOL bSec);
};
IMPLEMENT_DYNCREATE(CRectangle, CGraph)在RectDll中已经静态装载了GraphDll.
编译GraphDll时,一切OK。
在编译RectDll时,会出现下面可恶的Link2001错误,各位帮帮忙吧。
--------------------Configuration: RectDll - Win32 Debug--------------------
Linking...
   Creating library Debug/RectDll.lib and object Debug/RectDll.exp
Rectangle.obj : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const  CGraph::classCGraph" (?classCGraph@CGraph@@2UCRuntimeClass@@B)
Debug/RectDll.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.RectDll.dll - 2 error(s), 0 warning(s)

解决方案 »

  1.   

    在RectDll工程中,setting->link下增加GraphDll.lib,并在Options->lib Directories中指明路径或拷贝至rectdll目录下。
      

  2.   

    这个问题我刚刚碰到,现在解决了,应该是没有包含lib文件的问题,正如楼上所说的在link下包含需要的lib文件
      

  3.   

    致楼上的两位:
        我已经如你们所说的那样早已包含了lib,问题不是处在这里的。
      仔细瞧瞧吧?谢谢!
      

  4.   

    我知道问题处在哪里:关键是我在导出类时,生成的EXP文件中显示导出了静态的变量,而MFC规定对于静态变量,只能导出声明的而不能导出定义的静态变量。
    问题是现在如何绕过MFC的这一个规定?
      

  5.   

    倒出的函数是不是要加上extren "C"
      

  6.   

    问题不是加不加上extren "C",而是导出的是CRuntimeClass类型的静态变量。各位大哥大姐,帮帮我!
      

  7.   

    是头文件中使用 AFX_EXT_CLASS 的问题吧?从你的定义来看 RectDll 和 GraphDll 都是 MFC Extension DLL, 在编译 RectDll 的时候 GraphDll 头文件中的 AFX_EXT_CLASS 被解释成 AFX_CLASS_EXPORT , 按道理应该是 AFX_CLASS_IMPORT 才对(引入 GraphDll )
      

  8.   

    确实是头文件中使用 AFX_EXT_CLASS 的问题解决方法:
    create a new macro.hmacro.h 
    //begin
    #ifdef EXPORT_CLASS
    #undef EXPORT_CLASS
    #endif
    #ifdef _BUILD_DLL
    #define EXPORT_CLASS __declspec(dllexport)
    #else
    #define EXPORT_CLASS __declspec(dllimport)
    //end in you dll project setting c/c++ propcessor definitions add such:_BUILD_DLLand in you Graph and CRectangle的定义文件中
    add #include "macro.h"
    并使用 EXPORT_CLASS
    代替   AFX_EXT_CLASS
      

  9.   

    sorry:漏掉一句
    #endif//_BUILD_DLL
    //end
      

  10.   

    setting->link下增加GraphDll.lib,并在Options->lib Directories中指明路径或拷贝至rectdll目录下。