如何使用.net将事件回调参数发送到COM对象

时间:2011-01-23 13:03:50

标签: .net com-interop idispatch

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您希望传入一个IDispatch对象并且DispId为0的方法。有关如何创建IDispatch的信息,请参阅this article,然后使用DispId(0)给它一个方法。