C++ での明示的な PInvoke (DllImport 属性) の使用方法
.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 コンパイルでサポートされます。 詳細については、「純粋なコードと検証可能なコード (C++/CLI)」を参照してください。