为什么我不能在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
答案 0 :(得分:1)
正如Hans Passant指出我不应该选择GUID,应该使用生成器来生成它们。虽然这不是问题,但它本质上是相似的。在定义我的接口时,我没有遵循正确的ID模式,因为直到现在它还不重要。
我想我将重读COM编程与Microsoft .NET中的相应部分。我找到了第一次尝试使用错误查找工具的原因,通过打开Visual Studios高级模式功能暴露了它的存在。
经验教训:/
BekaD:
答案 1 :(得分:1)
您需要在基本接口和继承接口中使用不同的id
属性值。
答案 2 :(得分:0)
用户“vpp”就是这个。我只是在尝试创建一个继承自另一个的新接口时遇到了这个错误,所以我可以重载其中一个方法。我从原始界面复制并粘贴了整个东西,但没有将“id(1)”部分更改为新的唯一编号,所以我也收到“错误MIDL2020:错误生成类型库:LayOut失败”