.Net库中的许多方法都以本机代码实现。来自框架本身的标记为[MethodImpl(MethodImplOptions.InternalCall)]
。那些来自某些非托管DLL的标记为[DllImport]
(例如[DllImport("kernel32.dll")]
)。迄今没有什么不寻常的什么是[DllImport(“QCall”)]?
但写answer for another question时,我发现有很多方法标记[DllImport("QCall")]
。它们似乎是.Net的内部实现(例如GC._Collect()
)。
我的问题是:[DllImport("QCall")]
究竟是什么意思? [DllImport("QCall")]
和[MethodImpl(MethodImplOptions.InternalCall)]
之间的区别是什么?
这是一个特殊的内部调用;我试图找到细节。 – SLaks 2012-02-28 23:41:06
我记得读过“QCall”是clr.dll的一部分。然而,我不知道那么多。 +1为一个优秀的问题。 – ahawker 2012-02-29 01:36:52
这是一个.NET 4特有的功能。您可以从V4参考源中获得一些洞察,查看System.Runtime.CompilerServices.Jithelpers.cs的源代码。该字符串在clr.dll中出现两次,如__IsQCall和内联文字。这非常类似于MethodImplOptions.InternalCall之外的扩展机制,证明没有CLR源代码很困难。 – 2012-02-29 01:51:08