Linking...
VCAutoComDlg.obj : error LNK2005: _CLSID_Account already defined in VCAutoCom.obj
VCAutoComDlg.obj : error LNK2005: _LIBID_ATLSAMPLELib already defined in VCAutoCom.obj
VCAutoComDlg.obj : error LNK2005: _IID_IAccount already defined in VCAutoCom.obj
Debug/VCAutoCom.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.VCAutoCom.exe - 4 error(s), 0 warning(s)初学COM,用ATL编了个简单COM,想直接用COM库函数访问编的代码组件,出现上面错误,帮忙看看,谢谢
VCAutoComDlg.obj : error LNK2005: _CLSID_Account already defined in VCAutoCom.obj
VCAutoComDlg.obj : error LNK2005: _LIBID_ATLSAMPLELib already defined in VCAutoCom.obj
VCAutoComDlg.obj : error LNK2005: _IID_IAccount already defined in VCAutoCom.obj
Debug/VCAutoCom.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.VCAutoCom.exe - 4 error(s), 0 warning(s)初学COM,用ATL编了个简单COM,想直接用COM库函数访问编的代码组件,出现上面错误,帮忙看看,谢谢
http://expert.csdn.net/Expert/topic/1728/1728495.xml?temp=3.414333E-03自己搞定了,呵呵,今天早上仔细看了看《COM技术内幕》,才知道原来自己对COM一只半解
--------------------------------------------------------------------------------
其实问题一开就出在#include <ks.h>上。正确的意思是,让要实例化GUID的源文件使用定义的GUID,而让其他包含该头文件的源文件使用申明的外部GUID变量。
现在的调用顺序为
#include <objbase.h> ---如果没有定义INITGUID则声明需要的接口为外部变量
#include <initguid.h> ---重新定义DEFINE_GUID,定义需要的接口的GUID
#include "someclass.h"
----------------在someclass.h中
#include <atlbase.h>
#include <iadmw.h>
#include <iiscnfg.h>
------------------------------------------------------------------------------
摘一段objbase.h看看#ifndef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID FAR name
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
#endif // INITGUID 意思是如果定义了INITGUID则将一个DEFINE_GUID中的"name"GUID实例化#ifndef INITGUID
#include <cguid.h> 这里调用cguid.h
#endif
这里可以看出,如果在objbase.h前定义了INITGUID就不可能载入cguid.h,就会出现GUID_NULL 未定义的错误。如果画蛇添足的加入ks.h就出现了最开始的错误(把一个类型当作变量来定义)。
真不明白INITGUID怎么用。