複数のインターフェースが定義されたidlファイルがあり、そのうちの2つには次のようなものがあります。
[
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);
}
これらは2つの完全に無関係なインターフェースであり、たまたま同じ名前の1つのメソッドがあります(ただし、示されているように大文字と小文字は異なります)。すべて問題ないようですが、次のようなプロジェクトをコンパイルしようとすると、
ISomeInterface -> SOMEMethod
存在しないというエラーが表示されます。電話すれば
ISomeInterface -> SomeMethod
それはうまくコンパイルされます。
どちらかのメソッドの名前を変更すると、コンパイルも正常に行われます。2つの異なるインターフェイスで名前の衝突が発生することはないと思いますが、それが起こっているようです。
そのうちの1つを名前変更するだけで修正できますが、問題を本当に理解したいと思います。誰かが私のためにそれを説明できますか?ありがとう