2010-02-11 10 views
6

Ich erhalte eine COM-Ausnahme beim Versuch, in ein Ereignis auf einem COM-Objekt einzuhängen. Hier ist der Code, den ich ausführen möchte.COMException in C# beim Einhängen in Ereignis

COMClass a = IComClass as ComClass;
a.SomeEvent += new SomeEvent_EventHandler(MethodNameHere);

Linie zwei wirft eine Ausnahme vom Typ COMException mit folgenden Informationen:

System.Runtime.InteropServices.COMException gefangen wurde

Message = "Ausnahme von HRESULT: 0x80040202"

Quelle = "mscorlib"

ErrorCode = -2147220990

Stacktrace: bei System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (Object pUnkSink, Int32 & pdwCookie)

Hat jemand irgendwelche Ideen, warum ich nicht in der Lage bin zu einem COM-Ereignisse Haken oder wenn es eine Problemumgehung für das Verknüpfen von COM-Ereignissen?

Chris

Antwort

3

Der Fehlercode du hast ist CONNECT_E_CANNOTCONNECT, etwas, das gut Googles. Es zeigt an, dass der COM-Server nicht glücklich über Ihren Versuch ist, einen Ereignishandler zu abonnieren. Warum es nicht ist, musst du herausfinden. Es ist fast immer erforderlich, Hilfe vom Komponentenautor oder -anbieter anzufordern.

Eine Sache, die Sie versuchen können, ist, die Typbibliothek mit Oleview.exe zu betrachten und herauszufinden, ob das Ereignis, das Sie abonnieren möchten, auf einem Dispatch-Interface ist, das als Standard-Quellschnittstelle markiert ist. Wenn dies nicht der Fall ist, versuchen Sie, das Objekt auf den Typ dispinterface zu übertragen und dann sein Ereignis zu abonnieren.

4

Das Problem war die Schnittstelle für die Ereignisse wurde nicht registriert. Nachdem ich den Registrierungsschlüssel für die Ereignisschnittstelle hinzugefügt hatte, wurde das Problem behoben. Ich konnte die Schnittstellen-ID-Informationen mit OLEViewer.exe

erhalten