MIDL CoClass派生自在同一文件中定义的接口

时间:2011-08-08 01:42:32

标签: com typelib midl

为什么我不能在idl文件中定义接口,然后在我从另一个Proxy Server项目中定义的接口派生所述接口时,将CoClass派生到同一文件中的库块中?< / p>

[
 object,
 uuid(00000000-0000-0000-0000-000000000000),
 pointer_default(unique)
] interface IMyInterfaceB: IMyInterfaceA
{
    [id(1), helpstring("")]
    HRESULT NewMethod();
}

[
 uuid(10000000-0000-0000-0000-000000000000),
 helpstring("Type Library 1.00"),
 version(1.00)
]
library MyLibrary
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    [
        uuid(20000000-0000-0000-0000-000000000001),
        helpstring("My Class")
    ]
    coclass CMyClass
    {
        interface IMyInterfaceA;
        //interface IMyInterfaceB; /* error when I remove rem */
    };

}

1&gt; midl \ oleaut32.dll:错误MIDL2020:错误生成类型库:LayOut失败:IMyInterfaceB(0x800288C6

3 个答案:

答案 0 :(得分:1)

正如Hans Passant指出我不应该选择GUID,应该使用生成器来生成它们。虽然这不是问题,但它本质上是相似的。在定义我的接口时,我没有遵循正确的ID模式,因为直到现在它还不重要。

我想我将重读COM编程与Microsoft .NET中的相应部分。我找到了第一次尝试使用错误查找工具的原因,通过打开Visual Studios高级模式功能暴露了它的存在。

经验教训:/

BekaD:

答案 1 :(得分:1)

您需要在基本接口和继承接口中使用不同的id属性值。

答案 2 :(得分:0)

用户“vpp”就是这个。我只是在尝试创建一个继承自另一个的新接口时遇到了这个错误,所以我可以重载其中一个方法。我从原始界面复制并粘贴了整个东西,但没有将“id(1)”部分更改为新的唯一编号,所以我也收到“错误MIDL2020:错误生成类型库:LayOut失败”