C++ での明示的な PInvoke (DllImport 属性) の使用方法

更新 : 2007 年 11 月

.NET Framework では、明示的なプラットフォーム呼び出し (PInvoke) 機能に、マネージ アプリケーションが DLL 内部にパッケージ化されているアンマネージ関数を呼び出すことができるようにする Dllimport 属性を備えています。明示的な PInvoke は、アンマネージ API が DLL としてパッケージ化され、ソース コードが利用できない場合に必要です。たとえば、Win32 関数の呼び出しには、PInvoke が必要です。それ以外の場合、暗黙の P{Invoke を使用します。詳細については、「C++ Interop (暗黙の PInvoke) の使用」を参照してください。

PInvoke を機能させるには、DllImportAttribute を使用します。この属性は、その最初の引数として DLL 名を使用し、使用する各 DLL エントリ ポイントの関数宣言の前に置かれます。関数のシグネチャは、DLL によってエクスポートされた関数名に一致する必要があります (ただし、型変換によっては、マネージ型を使用して DllImport 宣言を定義することで、暗黙的に実行できるものもあります)。

その結果、これは、必要な遷移コード (または、サンク) と単純データ変換を含む各ネイティブ DLL 関数のマネージ エントリ ポイントになります。その後、マネージ関数は、これらのエントリ ポイントを介して DLL を呼び出します。PInvoke の結果モジュールに挿入されたコードは、完全に管理されており、明示的な PInvoke は、/clr/clr:pure/clr:safe コンパイルでサポートされます。詳細については、「純粋なコードと検証可能なコード」を参照してください。

このセクションの内容

参照

概念

マネージ コードからのネイティブ関数の呼び出し