我有一个引用的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)的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top