Muchos métodos en la biblioteca .Net se implementan en código nativo. Los que provienen del propio marco están marcados con [MethodImpl(MethodImplOptions.InternalCall)]
. Los que provienen de algún DLL no administrado están marcados con [DllImport]
(por ejemplo, [DllImport("kernel32.dll")]
). Hasta ahora nada inusual¿Qué es [DllImport ("QCall")]?
Pero al escribir answer for another question, descubrí que hay muchos métodos marcados con [DllImport("QCall")]
. Parecen ser implementaciones internas de .Net (por ejemplo, GC._Collect()
).
Mi pregunta es: ¿Qué significa exactamente [DllImport("QCall")]
? ¿Cuál es la diferencia entre [DllImport("QCall")]
y [MethodImpl(MethodImplOptions.InternalCall)]
?
Es una llamada interna especial; Estoy tratando de encontrar detalles. – SLaks
Recuerdo haber leído un rato que "QCall" es parte de clr.dll. Yo, sin embargo, no sé mucho más que eso. +1 para una excelente pregunta. – ahawker
Es una característica específica de .NET 4. Puede obtener un poco de información de la fuente de referencia V4, consulte el código fuente de System.Runtime.CompilerServices.Jithelpers.cs. La cadena aparece dos veces en clr.dll, como __IsQCall y como un literal en línea. Esto se asemeja mucho a un mecanismo de extensión más allá de MethodImplOptions.InternalCall, demostrando que es difícil sin el código fuente de CLR. –