COMException в C # при подключении к событию - PullRequest
6 голосов
/ 11 февраля 2010

Я получаю исключение COM при попытке подключиться к событию в COM-объекте. Вот код, который я пытаюсь выполнить.

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

Вторая строка создает исключение типа COMException со следующей информацией:

System.Runtime.InteropServices.COMException было обнаружено

Сообщение = "Исключение из HRESULT: 0x80040202"

Источник = "mscorlib"

ErrorCode = -2147220990

StackTrace: в System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (объект pUnkSink, Int32 & pdwCookie)

У кого-нибудь есть идеи, почему я не могу подключиться к COM-событию или есть обходной путь для подключения к COM-событиям?

Chris

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

Проблема заключалась в том, что интерфейс для событий не был зарегистрирован. Как только я добавил раздел реестра для интерфейса событий, это решило проблему. Мне удалось получить информацию об идентификаторе интерфейса, используя OLEViewer.exe

3 голосов
/ 11 февраля 2010

Код ошибки, который вы получили: CONNECT_E_CANNOTCONNECT, что хорошо гуглит. Это означает, что COM-сервер недоволен вашей попыткой подписать обработчик событий. Почему это не то, что вам нужно выяснить. Получение помощи от автора компонента или поставщика почти всегда требуется.

Одна вещь, которую вы можете попробовать, - это посмотреть библиотеку типов с помощью Oleview.exe и выяснить, относится ли событие, на которое вы пытаетесь подписаться, к внешнему интерфейсу, помеченному как исходный интерфейс по умолчанию. Если это не так, попробуйте привести объект к типу dispinterface, а затем подписаться на его событие.

...