【发布时间】:2015-11-10 08:54:30
【问题描述】:
我有一个据称是 COM 对象的 dll。我试图了解当 dll 中没有可用的导出函数时,CLR 究竟如何能够确定调用哪个函数(我使用依赖项进行了检查)。
[Guid("DEADBEEF....")]
[TypeLibType(...)]
[ComImport]
public interface ISomething
{
[DispId(1)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.IDispatch)]
object DoSomething([MarshalAs(UnmanagedType.IDispatch), In] object something);
}
在这里,我检查了 MSIL,没有关于地址或函数名称的信息,或者它所在的偏移量。
此外,似乎没有关于对象如何布局以便传递其 vtable 指针等的信息。
这是什么魔法?
【问题讨论】: