我正在編寫需要連接到COM事件的C#代碼。我實現了使用 的IConnectionPointContainer和的IConnectionPoint的這樣:連接到C#中的COM事件 - 支持託管服務器和非託管服務器
IConnectionPointContainer connectionPointContainer = internalGenerator as IConnectionPointContainer;
if (connectionPointContainer == null)
{
Debug.Fail("The script generator doesn't support the required interface - IConnectionPointContainer");
throw new InvalidCastException("The script generator doesn't support the required interface - IConnectionPointContainer");
}
Guid IID_IScriptGeneratorEvents = typeof(IScriptGeneratorCallback).GUID;
connectionPointContainer.FindConnectionPoint(ref IID_IScriptGeneratorEvents, out m_connectionPoint);
m_connectionPoint.Advise(this, out m_cookie);
的問題是,當COM服務器的.NET是實際執行的(比如說,C#),淨創建後,它處理它作爲一個。 Net對象,而不是COM對象。由於.Net對象沒有實現IConnectionPointContainer接口,因此當試圖將對象轉換爲該接口時,我會得到空值。
任何想法我該如何解決這個問題? 我當然可以在C#COM服務器上自己實現IConnectionPointContainer,但是我想要一個更簡單的解決方案,我可以很容易地向需要實現COM服務器的其他開發人員解釋。
P.S我必須使用IConnectionPointContainer,因爲COM服務器可以在非.Net(C++,Java)中實現。
謝謝, 因巴爾