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库函数访问编的代码组件,出现上面错误,帮忙看看,谢谢

解决方案 »

  1.   

    我刚解决这个问题:看
    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怎么用。
      

  2.   

    还是不很懂啊,你是说我的COM写错了吗?能正确生成DLL的,而且用其他方式可以调用的。我想用原始的COM库函数CoCreateInstance访问,我看不懂你所说的啊,太深奥了,能告诉我怎么改吗?我自己也先看看《COM技术内幕》吧