各位,俺是新手,帮俺看看这个Link2001错误怎么解决?

o_racle 2003-03-19 08:08:30
有两个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)
...全文
50 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
曾经的猎狐 2003-03-21
  • 打赏
  • 举报
回复
setting->link下增加GraphDll.lib,并在Options->lib Directories中指明路径或拷贝至rectdll目录下。
ssschangyu 2003-03-21
  • 打赏
  • 举报
回复
sorry:

漏掉一句
#endif//_BUILD_DLL
//end
ssschangyu 2003-03-20
  • 打赏
  • 举报
回复
确实是头文件中使用 AFX_EXT_CLASS 的问题

解决方法:
create a new macro.h

macro.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_DLL

and in you Graph and CRectangle的定义文件中
add #include "macro.h"
并使用 EXPORT_CLASS
代替 AFX_EXT_CLASS


In355Hz 2003-03-20
  • 打赏
  • 举报
回复
是头文件中使用 AFX_EXT_CLASS 的问题吧?

从你的定义来看 RectDll 和 GraphDll 都是 MFC Extension DLL, 在编译 RectDll 的时候 GraphDll 头文件中的 AFX_EXT_CLASS 被解释成 AFX_CLASS_EXPORT , 按道理应该是 AFX_CLASS_IMPORT 才对(引入 GraphDll )
o_racle 2003-03-20
  • 打赏
  • 举报
回复
问题不是加不加上extren "C",而是导出的是CRuntimeClass类型的静态变量。

各位大哥大姐,帮帮我!

elabs 2003-03-19
  • 打赏
  • 举报
回复
倒出的函数是不是要加上extren "C"
maoxianwang 2003-03-19
  • 打赏
  • 举报
回复
为何要导出静太变量呢?

不如直接做几个访问函数算了
o_racle 2003-03-19
  • 打赏
  • 举报
回复
我知道问题处在哪里:关键是我在导出类时,生成的EXP文件中显示导出了静态的变量,而MFC规定对于静态变量,只能导出声明的而不能导出定义的静态变量。
问题是现在如何绕过MFC的这一个规定?
o_racle 2003-03-19
  • 打赏
  • 举报
回复
致楼上的两位:
我已经如你们所说的那样早已包含了lib,问题不是处在这里的。
仔细瞧瞧吧?谢谢!
showmetheway 2003-03-19
  • 打赏
  • 举报
回复
这个问题我刚刚碰到,现在解决了,应该是没有包含lib文件的问题,正如楼上所说的在link下包含需要的lib文件
hanwg 2003-03-19
  • 打赏
  • 举报
回复
在RectDll工程中,setting->link下增加GraphDll.lib,并在Options->lib Directories中指明路径或拷贝至rectdll目录下。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧