Как отправить параметр обратного вызова событий в объект com с .net
-
23-10-2019 - |
Вопрос
У меня есть ссылка на коммерческий. Некоторые методы ожидают параметра обратного вызова. Я проверил interop.mycomlib.dll в отражателе:
public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);
Как отправить этот параметр? Я не могу отправить делегата (исключение компиляции). Я пытался отправить this
и получил InvalidCastException
.
Решение
Idispatch - это интерфейс Com. CLR автоматически реализует его, если вы используете атрибуты [compisible (true)] и [classinterface (classinterfacetype.autodispatch)] в вашем классе. Затем вы можете пройти экземпляр класса, и актерский состав будет успешным. Код, вероятно, будет называть какой -то метод в этом классе, поэтому убедитесь, что он реализован. Из вопроса не ясно, какой метод это может быть и как должна выглядеть его подпись. Это должно точно соответствовать, несоответствие может предотвратить обратный вызов, который когда -либо возникал без диагностики.
Другие советы
Вы хотите пройти в объект, который является идиспатчом и имеет метод с дискретией 0. см. эта статья Для того, чтобы создать iDispatch, затем дайте ему один метод с Dispid (0).