首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从同一文件中定义的接口派生的MIDL CoClass

从同一文件中定义的接口派生的MIDL CoClass
EN

Stack Overflow用户
提问于 2011-08-08 09:42:32
回答 3查看 1.5K关注 0票数 3

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

代码语言:javascript
复制
[
 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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-09 08:07:31

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

当我第一次尝试错误查找工具时,我发现了错误查找工具的原因,因为我打开了Visual Studios高级模式功能,从而暴露了它的存在。

吸取的经验教训:/

BekaD:

票数 1
EN

Stack Overflow用户

发布于 2012-01-30 18:45:28

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

票数 1
EN

Stack Overflow用户

发布于 2014-11-15 00:50:21

用户"vpp“在这一点上是正确的。当我试图创建一个继承自另一个接口的新接口,以便重载其中一个方法时,我自己就遇到了这个错误。我从原始接口复制并粘贴了整个内容,但没有将"id(1)“部分更改为新的唯一编号,因此我也收到了"error MIDL2020: error generating type library : LayOut failed”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6977067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档