.Net库中的许多方法都是用本机代码实现的。那些来自框架本身的标记有[MethodImpl(MethodImplOptions.InternalCall)]。来自非托管DLL的文件将被标记为[DllImport](例如[DllImport("kernel32.dll")])。到目前为止,没有任何异常。

但是在编写answer for another question时,我发现有很多方法用[DllImport("QCall")]标记。它们似乎是.Net的内部实现(例如GC._Collect())。

我的问题是:[DllImport("QCall")]到底是什么意思? [DllImport("QCall")][MethodImpl(MethodImplOptions.InternalCall)]有什么区别?

最佳答案

这是一种旧思路。由于CoreCLR现在是在GitHub上开源的;如果有人仍在寻找答案,这是official documentation:



然后在子标题中继续:

  • Choosing between FCall, QCall, P/Invoke, and writing in managed code
  • QCall Functional Behavior

  • 带有示例:
  • QCall Example - Managed Part
  • QCall Example - Unmanaged Part
  • 关于.net - 什么是[DllImport (“QCall”)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9491337/

    10-13 00:05