Cómo enviar un parámetro de devolución de llamada de evento a un objeto COM con .NET

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

  •  23-10-2019
  •  | 
  •  

Pregunta

He referenciado un com dll. Algunos métodos esperan un parámetro de devolución de llamada. Revisé el interop.mycomlib.dll en reflector:

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

¿Cómo envío este parámetro? No puedo enviar un delegado (excepción de compilación). He intentado enviar this y recibido InvalidCastException.

¿Fue útil?

Solución

Idispatch es una interfaz COM. El CLR lo implementará automáticamente si usa los atributos [Comvisible (true)] y [classInterfaceType.autodisPatch)] en su clase. Luego puede pasar una instancia de la clase y el elenco tendrá éxito. El código probablemente llamará a algún tipo de método en esa clase, así que asegúrese de que esté implementado. No está claro por la pregunta de qué método podría ser y cómo debería ser su firma. Debe coincidir exactamente, un desajuste puede evitar que la devolución de llamada se produzca sin diagnóstico.

Otros consejos

Desea pasar en un objeto que sea un idsispatch y tiene un método con una disputa de 0. ver Este artículo Para obtener cómo crear un idsispatch, dale un solo método con dispid (0).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top