Как отправить параметр обратного вызова события в COM-объект с помощью .net - PullRequest
0 голосов
/ 23 января 2011

У меня есть ссылка на COM DLL.Некоторые методы ожидают параметр обратного вызова.Я проверил interop.MyComLib.dll в отражателе:

public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);

Как отправить этот параметр?Я не могу отправить делегата (исключение компиляции).Я попытался отправить this и получил InvalidCastException.

Ответы [ 2 ]

1 голос
/ 23 января 2011

IDispatch - это интерфейс COM.CLR автоматически реализует его, если вы используете атрибуты [ComVisible (true)] и [ClassInterface (ClassInterfaceType.AutoDispatch)] в своем классе.Затем вы можете передать экземпляр класса, и приведение пройдет успешно.Затем код, вероятно, будет вызывать какой-то метод для этого класса, поэтому убедитесь, что он реализован.Из вопроса не ясно, какой это может быть метод и как должна выглядеть его подпись.Оно должно точно совпадать, несоответствие может помешать обратному вызову без диагностики.

0 голосов
/ 23 января 2011

Вы хотите передать объект, который является IDispatch и имеет метод с DispId, равным 0. См. эту статью , чтобы узнать, как создать IDispatch, а затем назначьте ему единственный метод с DispId (0). ,

...