3

当我从我在另一个代理服务器项目中定义的接口派生所述接口时,为什么我不能在 idl 文件中定义接口,然后让 CoClass 在同一文件内的库块中派生它?

[
 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>midl\oleaut32.dll:错误 MIDL2020:错误生成类型库:LayOut 失败:IMyInterfaceB (0x800288C6

4

3 回答 3

1

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

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

得到教训 :/

贝卡德:

于 2011-08-09T00:07:31.217 回答
1

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

于 2012-01-30T10:45:27.983 回答
0

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

于 2014-11-14T16:50:20.833 回答