写了一个COM
在IDL文件中发现类型库中的UUID与接口中的UUID不一样
而其他的COM组件都一样
是为什么啊
我的IDL文件:
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(BE8EB1FC-2BE5-4FF3-9966-ECD5A9162973),

helpstring("IComDemomo Interface"),
pointer_default(unique)
]
interface IComDemomo : IUnknown
{
[helpstring("method GetMonth")] HRESULT GetMonth([in] BSTR sdgf);
};[
uuid(D6B8015B-7881-4423-AD58-93BC3662EFFE),
version(1.0),
helpstring("ComDemo2 1.0 Type Library")
]
library COMDEMO2Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb"); [
uuid(2EFC22CA-6AC8-4115-AC04-D2BC025782B4),
helpstring("ComDemomo Class")
]
coclass ComDemomo
{
[default] interface IComDemomo;
};
};

解决方案 »

  1.   

    外面的是接口对象,库内的是这个接口的实现类,两个不同的对象应该是不一样的uuid啊
      

  2.   

    哈哈!一个是iid接口id,一个是clsid实现类id.eg:
    CoCreateInstance()创建一个接口对象时一个参数要的是接口实现类的clsid,倒数第二个要的是你的接口id.因为一个接口可能有多个实现类!所以在com中给实现类也加上了一个uuid属性。看看《com本质论》。
      

  3.   

    类型库、COM类和接口等都有UUID
      

  4.   

    wangweixing2000(星(准备跳槽中!!)) ( )  
    说得完全正确
      

  5.   

    各位,这是一份示例代码,明明是一样的!!!!!
    import "oaidl.idl";
    import "ocidl.idl";
    [
    object,
    uuid(B91D4567-D492-11D3-8021-0010E3B966CE),
    dual,
    helpstring("ISimpleDNSClient Interface"),
    pointer_default(unique)
    ]
    interface ISimpleDNSClient : IDispatch
    {
    [id(3), helpstring("method Resolve")] HRESULT Resolve([in] BSTR BSearchedName, [out] VARIANT *pvFoundNames, [in, defaultvalue("C_IN")] BSTR BResourceClass, [in, defaultvalue("T_A")] BSTR BResourceType);
    [id(4), helpstring("method GetDNSDomain")] HRESULT GetDNSDomain([out] VARIANT *pvDNSDomainName);
    [propget, id(7), helpstring("property Separator")] HRESULT Separator([out, retval] BSTR *pVal);
    [propput, id(7), helpstring("property Separator")] HRESULT Separator([in] BSTR newVal);
    [id(8), helpstring("method GetEmailServers")] HRESULT GetEmailServers([in] BSTR BDomainName, [out] VARIANT *pvEmailServerNames);
    [propget, id(9), helpstring("property ServerAddresses")] HRESULT ServerAddresses([out, retval] BSTR *pVal);
    [propput, id(9), helpstring("property ServerAddresses")] HRESULT ServerAddresses([in] BSTR newVal);
    [id(10), helpstring("method FindServerAddresses")] HRESULT FindServerAddresses(VARIANT *pvServerAddresses);
    };[
    uuid(B91D4558-D492-11D3-8021-0010E3B966CE),
    version(1.0),
    helpstring("SimpleDNSResolver 1.0 Type Library")
    ]
    library SIMPLEDNSRESOLVERLib
    {
    importlib("stdole32.tlb");
    importlib("stdole2.tlb"); [
    uuid(B91D4568-D492-11D3-8021-0010E3B966CE),
    helpstring("SimpleDNSClient Class")
    ]
    coclass SimpleDNSClient
    {
    [default] interface ISimpleDNSClient;
    };
    };
      

  6.   

    还有,微软的MCSD教材上有个示例代码也是一样的!!
      

  7.   

    兄台,宁信书则不如无书。楼上说的对,是因该不同的。所谓的uuid也就是个唯一标志符而已,就象你可以用zhanvi(追梦)来唯一标识你一样。如果有另外的一个人也叫zhanvi(追梦)。要调用到zhanvi(追梦)来执行操作的就会出现问题。