我們有多個接口的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);
}
它們是兩個完全不相干的接口,碰巧有一個方法具有相同名稱(但具有不同的外殼爲示出)。 一切似乎都OK,但是當我們試圖編譯調用
ISomeInterface -> SOMEMethod
我們得到一個錯誤,它並不存在的項目。如果我們打電話
ISomeInterface -> SomeMethod
它編譯得很好。
如果我們重命名任何一種方法,它也編譯好。我不希望在兩個不同的界面中出現命名衝突,但似乎是發生了什麼。
我們可以通過重命名其中一個來修復它,但我真的很想了解這個問題。任何人都可以爲我解釋嗎? 謝謝
謝謝,你的phsyic調試能力是驚人的,我們正在使用它在一個託管的c#項目(我會包括信息,它跨過我的腦海,它是相關的),所以你的答案可能是正確的。我會嘗試你建議的新tlbimp,謝謝。 – 2010-03-03 16:49:58