当我从另一个代理服务器项目中定义的接口派生接口时,为什么不能在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
发布于 2011-08-09 08:07:31
正如Hans Passant指出的,我不应该选择GUID,应该使用生成器来生成它们。尽管这不是问题所在,但它在本质上是相似的。在定义我的接口时,我没有遵循正确的ID模式,因为到目前为止,这并不重要。
当我第一次尝试错误查找工具时,我发现了错误查找工具的原因,因为我打开了Visual Studios高级模式功能,从而暴露了它的存在。
吸取的经验教训:/
BekaD:
发布于 2012-01-30 18:45:28
您需要在基接口和继承接口中使用不同的id属性值。
发布于 2014-11-15 00:50:21
用户"vpp“在这一点上是正确的。当我试图创建一个继承自另一个接口的新接口,以便重载其中一个方法时,我自己就遇到了这个错误。我从原始接口复制并粘贴了整个内容,但没有将"id(1)“部分更改为新的唯一编号,因此我也收到了"error MIDL2020: error generating type library : LayOut failed”
https://stackoverflow.com/questions/6977067
复制相似问题