如何将事件回调参数发送到使用.NET的com对象
-
23-10-2019 - |
题
我有一个引用的com dll。一些方法期望回调参数。我在反射器中检查了Interop.mycomlib.dll:
public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);
如何发送此参数?我无法发送代表(汇编例外)。我尝试发送 this
并收到 InvalidCastException
.
解决方案
IDISPATCH是COM接口。如果您在类上使用[comvisible(true)]和[classInterfaceType.autodispatch)]属性,则CLR将自动实现它。然后,您可以通过班级的实例,演员将成功。然后,该代码可能会在该类上调用某种方法,因此请确保其实现。从问题中不清楚哪种方法以及其签名应该是什么样的。它必须完全匹配,不匹配有可能防止回调发生而没有诊断。
其他提示
您想传递一个iDispatch的对象,并具有分配为0的方法。请参阅 本文 对于如何创建IDISPATCH,然后给它一种使用DispID(0)的方法。
不隶属于 StackOverflow