У нас есть файл 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
компилируется просто отлично.
Если мы переименуем любой метод, он также скомпилируется. Я не ожидал бы столкновения имен в двух разных интерфейсах, но, похоже, именно это и происходит.
Мы можем это исправить, просто переименовав одну из них, но мне бы очень хотелось понять проблему. Кто-нибудь может объяснить это для меня?
Спасибо