我们有一个定义了多个接口的 idl 文件,其中两个接口是这样的:
[
object,
uuid(79E24BAA-DC12-4caf-91DD-2A4D47FED30A),
helpstring("ISomeInterface Interface"),
pointer_default(unique)
]
interface ISomeInterface: IUnknown
{
[propget, id(2)]
HRESULT SOMEMethod([out, retval] BSTR* pValue);
};
[
object,
uuid(834421B6-511D-457D-B50C-69E7E1B65471),
dual,
nonextensible,
helpstring("IACompleteDifferentInterface Interface"),
pointer_default(unique)
]
interface IACompleteDifferentInterface : IDispatch
{
[propget, helpstring("property SomeMethod")]
HRESULT SomeMethod([out, retval] BSTR* pVal);
[propput, helpstring("property SomeMethod")]
HRESULT SomeMethod([in] BSTR newVal);
}
它们是两个完全不相关的接口,恰好有一个同名的方法(尽管如图所示具有不同的大小写)。一切似乎都很好,但是当我们尝试编译一个调用的项目时
ISomeInterface -> SOMEMethod
我们得到一个错误,说它不存在。如果我们打电话
ISomeInterface -> SomeMethod
它编译得很好。
如果我们重命名任一方法,它也可以编译。我不希望在两个不同的接口中发生命名冲突,但这似乎就是正在发生的事情。
我们可以通过简单地重命名其中一个来解决它,但我真的很想了解这个问题。谁能为我解释一下?谢谢