C++ での明示的な PInvoke (DllImport 属性) の使用方法
.NET Framework では、明示的なプラットフォーム呼び出し (PInvoke) 機能に、マネージド アプリケーションが DLL 内部にパッケージ化されているアンマネージド 関数を呼び出すことができるようにする Dllimport
属性を備えています。 明示的な PInvoke は、アンマネージ API が DLL としてパッケージ化され、ソース コードが利用できない場合に必要です。 たとえば、Win32 関数の呼び出しには、PInvoke が必要です。 それ以外の場合は、暗黙の PInvoke を使います。詳細については、「C++ Interop (暗黙の PInvoke) の使用」を参照してください。
PInvoke を機能させるには、DllImportAttribute を使用します。 この属性は、その最初の引数として DLL 名を使用し、使用する各 DLL エントリ ポイントの関数宣言の前に置かれます。 関数のシグネチャは、DLL によってエクスポートされた関数名に一致する必要があります (ただし、型変換によっては、マネージド型を使用して DllImport
宣言を定義することで、暗黙的に実行できるものもあります)。
その結果、これは、必要な遷移コード (または、サンク) と単純データ変換を含む各ネイティブ DLL 関数のマネージド エントリ ポイントになります。 その後、マネージド関数は、これらのエントリ ポイントを介して DLL を呼び出します。 PInvoke の結果としてモジュールに挿入されたコードは、完全にマネージドになります。