.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、およびインラインリテラルとして2回表示されます。これは、MethodImplOptions.InternalCallを超えた拡張メカニズムに非常に似ており、CLRソースコードなしでは難しいことを示しています。 –