.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