Как отправить параметр обратного вызова событий в объект com с .net

StackOverflow https://stackoverflow.com/questions/4773943

  •  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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top