假设我有一个众所周知的接口IWellKnownInterface
,它是已知的COM-visible
并已注册。
我也有C#,
这个对象的托管(确切地说)实现:
public class MyWellKnownClass : IWellKnownInterface { ... }
最后,我有一个extern
方法,它接受这个接口的对象:
[Whatever]
private static extern void ExternMethod(IWellKnownInterface veryWellKnown);
问题一:
我想从以下CLR
角度了解以下代码下会发生什么:
IWellKnownInterface a = new MyWellKnownClass();
ExternMethod(a);
我知道,如果我们谈论的是从托管代码调用非托管 COM 对象,那么一切都是关于构造一个适当Runtime Callable Wrapper
的并通过适当的参数转换通过它委托调用。但是,当我们有一个托管 COM 对象并在非托管代码中使用它时,我找不到任何有关这种情况的信息。
问题2:
类型如何dynamic
影响CLR
相同情况下的行为?它会以某种方式改变内部托管到非托管的互操作逻辑吗?MyWellKnownClass
也许为实例添加一些额外的包装器?
dynamic a = new MyWellKnownClass();
ExternMethod(a);