2010-02-11 20 views
6

Otrzymuję wyjątek COM podczas próby nawiązania połączenia z zdarzeniem na obiekcie COM. Oto kod, który próbuję wykonać.Wyjątek COMException w języku C# podczas dołączania do zdarzenia

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

Linia dwa zgłasza wyjątek typu COMException z następującymi informacjami:

System.Runtime.InteropServices.COMException został złapany

Message = "Wyjątek od HRESULT: 0x80040202"

Źródło = "mscorlib"

Kod błędu = -2147220990

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

Czy ktoś ma jakieś pomysły, dlaczego nie mogę zaczepić w przypadku COM lub gdy istnieje obejście dla przechwytywania zdarzeń COM?

Chris

Odpowiedz

3

Kod błędu masz jest CONNECT_E_CANNOTCONNECT, coś, gogli dobrze. Wskazuje, że serwer COM nie jest zadowolony z próby subskrypcji obsługi zdarzeń. Dlaczego nie jest to coś, czego musisz się dowiedzieć. Uzyskiwanie pomocy od autora lub dostawcy komponentu jest prawie zawsze wymagane.

Jedną rzeczą, którą możesz spróbować, jest przejrzenie biblioteki typów za pomocą programu Oleview.exe i sprawdzenie, czy zdarzenie, które próbujesz zasubskrybować, znajduje się na interfejsie dispinterface oznaczonym jako domyślny interfejs źródłowy. Jeśli tak nie jest, spróbuj rzucić obiekt na typ interfejsu, a następnie zasubskrybuj jego wydarzenie.

4

Problem polegał na tym, że interfejs zdarzeń nie został zarejestrowany. Po dodaniu klucza rejestru do interfejsu zdarzeń rozwiązało to problem. Byłem w stanie uzyskać informacje o identyfikatorze interfejsu przy użyciu OLEViewer.exe

Powiązane problemy