У меня есть неуправляемый COM-сервер C ++, который настроен на запуск событий, и я пытаюсь обработать эти события из моего приложения C #.
Указанное приведение недействительно.в 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
на месте ви мой класс.
Что может происходить, как я могу отладить это?