【发布时间】:2017-06-12 19:22:53
【问题描述】:
我编写了一些 C# 代码,它使用 Marshal.GetIDispatchForObject 将 .NET 对象作为 IDispatch 指针返回给非托管代码,但是,该对象还实现了其他(非 .NET 定义的)COM 接口。
在非托管世界中,QueryInterface 这些接口工作正常,但是,在它们上调用方法永远不会破坏我的 .NET 代码,并且似乎只返回默认值 (0)。
是否可以将 .NET 对象编组为双接口,以便可以通过 IDispatch 或通过查询特定接口来使用它?我的类型是公开的,ComVisible,我尝试申请[ClassInterface(ClassInterfaceType.AutoDual)],但没有运气。
使用UnmanagedType.Interface marshaling 让事情正常工作没有任何问题,但是,支持IDispatch 似乎也有问题。如果有一种简单的方法来“手动”实现IDispatch,这也是一个可以接受的解决方案。
【问题讨论】:
-
很久没搞这些杂草了,不过我觉得你应该把类接口属性设置为
None,自己手动实现IReflect接口。