InvalidCastException при настройке обработчика для события COM - PullRequest
0 голосов
/ 04 октября 2010

У меня есть неуправляемый COM-сервер C ++, который настроен на запуск событий, и я пытаюсь обработать эти события из моего приложения C #.

Однако при настройке обработчика

я получаю исключение InvalidCastException
myCOMObj.MyCOMEvent += new MyCOMSource_MyCOMEventHandler(handler);

Трассировка стека показывает:

Указанное приведение недействительно.в System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (объект pUnkSink, Int32 & dwCookie) в MyCOMSource_EventProvider.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler) в MyCOM * * MyCOMкак это

IConnectionPointContainer connectionPointContainer = (IConnectionPointContainer)myCOMObj;
Guid sourceGuid = typeof(MyCOMSource).GUID;
IConnectionPoint connectionPoint;
connectionPointContainer.FindConnectionPoint(ref sourceGuid, out connectionPoint);
int cookie;
connectionPoint.Advise(myEventNotifier, out cookie);

, где myEventNotifier - это объект класса, определенного следующим образом:

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class EventNotifier : MyCOMSource
...

Но я получаю то же InvalidCastException в connectionPoint.Advise с трассировкой стека

Указанный состав недействителен.at System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (Object pUnkSink, Int32 & pdwCookie)

Я предполагаю, что это проблема на стороне клиента из-за непротиворечивого поведения, когда я пытаюсь сделатьмой собственный материал ConnnectionPoint, и когда я позволю фреймворку сделать это для меня.Но в случае, если это что-то на стороне сервера:

На стороне COM-сервера я объявил это так:

coclass MyCOMCoClass
{
    [default] dispinterface MyCOMInterface;
    [default, source] dispinterface MyCOMSource;
};

У меня есть макросы CONNECTION_MAP и CONNECTION_PART на месте ви мой класс.

Что может происходить, как я могу отладить это?

1 Ответ

1 голос
/ 09 февраля 2011

Идентификатор GUID MyEventHandler должен быть равен sourceGuid, а текущая сборка ДОЛЖНА БЫТЬ СОВМЕСТИМА.

...