《COM技术内幕》第八章的问题

firecityplans 2009-05-23 03:25:50
第八章中有个完整的例子,也就是在书的145页。不知有谁看过,还请大家劳驾一下了。书中给了两个组件,也就是两个清单8-3和8-4,不知道这两个程序能放到一起运行不。我试了一下,说是不行。问题出现如下的错误:
--------------------Configuration: Client - Win32 Debug--------------------
Linking...
CMPNT1.OBJ : error LNK2005: "public: virtual long __stdcall CFactory::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@CFactory@@UAGJABU_GUID@@PAPAX@Z) already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: "public: virtual unsigned long __stdcall CFactory::AddRef(void)" (?AddRef@CFactory@@UAGKXZ) already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: "public: virtual unsigned long __stdcall CFactory::Release(void)" (?Release@CFactory@@UAGKXZ) already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: "public: virtual long __stdcall CFactory::CreateInstance(struct IUnknown *,struct _GUID const &,void * *)" (?CreateInstance@CFactory@@UAGJPAUIUnknown@@ABU_GUID@@PAPAX@Z) already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: "public: virtual long __stdcall CFactory::LockServer(int)" (?LockServer@CFactory@@UAGJH@Z) already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: _DllCanUnloadNow@0 already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: _DllGetClassObject@12 already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: _DllRegisterServer@0 already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: _DllUnregisterServer@0 already defined in CMPNT2.OBJ
CMPNT1.OBJ : error LNK2005: _DllMain@12 already defined in CMPNT2.OBJ
CMPNT1.OBJ : warning LNK4006: "public: virtual long __stdcall CFactory::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@CFactory@@UAGJABU_GUID@@PAPAX@Z) already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: "public: virtual unsigned long __stdcall CFactory::AddRef(void)" (?AddRef@CFactory@@UAGKXZ) already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: "public: virtual unsigned long __stdcall CFactory::Release(void)" (?Release@CFactory@@UAGKXZ) already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: "public: virtual long __stdcall CFactory::CreateInstance(struct IUnknown *,struct _GUID const &,void * *)" (?CreateInstance@CFactory@@UAGJPAUIUnknown@@ABU_GUID@@PAPAX@Z) already defined in CMPNT2.OBJ; second definition
ignored
CMPNT1.OBJ : warning LNK4006: "public: virtual long __stdcall CFactory::LockServer(int)" (?LockServer@CFactory@@UAGJH@Z) already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: _DllCanUnloadNow@0 already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: _DllGetClassObject@12 already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: _DllRegisterServer@0 already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: _DllUnregisterServer@0 already defined in CMPNT2.OBJ; second definition ignored
CMPNT1.OBJ : warning LNK4006: _DllMain@12 already defined in CMPNT2.OBJ; second definition ignored
Creating library Debug/Client.lib and object Debug/Client.exp
Client.exp : warning LNK4070: /OUT:Cmpnt.dll directive in .EXP differs from output filename "Debug/Client.exe"; ignoring directive
Debug/Client.exe : warning LNK4086: entrypoint "_mainCRTStartup" is not __stdcall with 12 bytes of arguments; image may not run
Debug/Client.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Client.exe - 11 error(s), 12 warning(s)

我是刚开始学,不知道为什么会这样。怎样修改才能改变这样的错误。

另外是即使先用一个程序清单8-3或8-4不会出现错误,但运行出来的程序也是一闪而过,不知为何?请教!
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jameshooo 2009-05-23
  • 打赏
  • 举报
回复
显然不能把两个例子放到一起编译,两个例子之间是升级的关系,版本2比版本1多加了些功能,所以同一个类名的类定义不同,会产生符号冲突。
biweilun 2009-05-23
  • 打赏
  • 举报
回复
second definition
already defined in

这种我想你自己猜也能猜到问题所在了
biweilun 2009-05-23
  • 打赏
  • 举报
回复
头文件冲突估计
猞猁狲 2009-05-23
  • 打赏
  • 举报
回复
你这两个项目里引用了相同的头文件,然后两个项目在又互相引用头文件了!自己好好查查 #include
WaistCoat18 2009-05-23
  • 打赏
  • 举报
回复
应该是你的代码哪里写的有问题。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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