У нас есть файл IDL с несколькими интерфейсами, определенный, два из которых имеет коснуться, как это:В чем причина столкновения имен в файле 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
он компилируется просто отлично.
Если мы переименуем любой метод, он также скомпилирует ok. Я бы не ожидал столкновения имен в двух разных интерфейсах, но это похоже на то, что происходит.
Мы можем исправить это, просто переименовав один из них, но я действительно хотел бы понять проблему. Может ли кто-нибудь объяснить это мне? Спасибо
Спасибо, ваши способности отладки phsyic поражают, что мы используем его в управляемом проекте C# (я бы включил эту информацию, если бы это перешло мне в голову, что это было важно), поэтому ваш ответ, вероятно, правильный. Спасибо, я попробую новый tlbimp. –