У меня есть неуправляемый COM-сервер C++, который настроен для запуска событий, и я пытаюсь обработать эти события из моего приложения C#.InvalidCastException при настройке обработчика для COM-события
Однако я получаю InvalidCastException при настройке обработчика
myCOMObj.MyCOMEvent += new MyCOMSource_MyCOMEventHandler(handler);
Трассировка стека показывает:
указано литая не является действительным. в System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (Object pUnkSink, Int32 & dwCookie) в MyCOMSource_EventProvider.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler) в MyCOMSource_Event.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler)
Я попытался создать мой собственный IConnectionPoint как этот
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
с трассировкой стека
Указанных литой не действуют. в 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
макросы на месте в своем классе, а также.
Что может происходить, как я могу отладить это?