Многие методы в библиотеке .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
Я помню, как некоторое время читал, что «QCall» является частью clr.dll. Я, однако, не знаю много за этим. +1 за отличный вопрос. – ahawker
Это особенность .NET 4. Вы можете получить немного информации из Справочного источника V4, посмотреть исходный код System.Runtime.CompilerServices.Jithelpers.cs. Строка появляется дважды в clr.dll, как __IsQCall и как встроенный литерал. Это сильно напоминает механизм расширения вне метода MethodImplOptions.InternalCall, доказывая, что это сложно без исходного кода CLR. –