0

我有一个引用的 COM dll。某些方法需要回调参数。我检查了反射器中的 interop.MyComLib.dll:

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

如何发送此参数?我无法发送委托(编译异常)。我试过发送this和接收InvalidCastException

4

2 回答 2

1

IDispatch 是一个 COM 接口。如果您在类上使用 [ComVisible(true)] 和 [ClassInterface(ClassInterfaceType.AutoDispatch)] 属性,CLR 将自动实现它。然后,您可以传递该类的一个实例,并且转换将成功。然后代码可能会调用该类的某种方法,因此请确保它已实现。从这个问题中不清楚可能是什么方法以及它的签名应该是什么样子。它必须完全匹配,不匹配可能会阻止回调在没有诊断的情况下发生。

于 2011-01-23T15:04:11.247 回答
0

您想传入一个 IDispatch 对象,并且该对象具有 DispId 为 0 的方法。请参阅这篇文章了解如何创建 IDispatch,然后为它提供一个 DispId(0) 方法。

于 2011-01-23T15:10:34.497 回答