所以今天我在浏览ILSpy时,想更好地了解.NET如何执行外部方法的DllImports,当我遇到一些奇怪的东西时:
当搜索枚举值
好吧,这似乎不仅仅是枚举值的幕后重复使用:
有趣的是,
问题:
字段实际上可以是PInvoke实现的吗,还是这只是.NET框架中平衡字段装饰和方法装饰的存根实现?
如果可能的话,这个功能可以用C#实现吗?还是需要C++/CLI?
当搜索枚举值
PInvokeImpl
的引用时,该枚举值定义在System.Reflection.MethodAttributes
枚举中,我注意到在System.Reflection.FieldAttributes
中有一个匹配的定义。好吧,这似乎不仅仅是枚举值的幕后重复使用:
System.Reflection.FieldInfo
有一个公开定义的属性称为IsPinvokeImpl
,它专门检查此实现标志是否已设置。有趣的是,
MethodInfo
类甚至没有这个属性 - 必须从MethodImplementationFlags
属性中确定。问题:
字段实际上可以是PInvoke实现的吗,还是这只是.NET框架中平衡字段装饰和方法装饰的存根实现?
如果可能的话,这个功能可以用C#实现吗?还是需要C++/CLI?