13,008
回編集
細 (Wiki がページ「C Sharp - C++DLL」を「C Sharpの基礎 - C++DLL」に、リダイレクトを残さずに移動しました) |
編集の要約なし |
||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
C# EXEからC++ DLLへ様々なデータ型の変数を渡したいときがある。<br> | C# EXEからC++ DLLへ様々なデータ型の変数を渡したいときがある。<br> | ||
<br><br> | |||
== DllImport属性 == | |||
<code>DllImport</code>属性には、DLLファイルのパスを指定する以外にも、下表のような引数を与えることができる。<br> | |||
他にも、細かい設定をするための引数が用意されているので、<code>DllImportAttribute</code>クラスで検索すること。<br> | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! 名称 !! 説明 | |||
|- | |||
| CallingConvention || エントリポイントの呼び出し規約を明示的に指定できる。<br>指定なしの場合は__stdcallとなる。 | |||
|- | |||
| CharSet || 文字列パラメータをメソッドにマーシャリングし、名前マングルを制御する方法を指定する。<br>文字コードの相互変換する時に指定する。 | |||
|- | |||
| EntryPoint || 呼び出すDLLエントリポイントの名前または序数を指定する。<br>DLLの関数名とC#上で使用する関数名を異なる名前にする時に指定する。 | |||
|} | |||
</center> | |||
<br><br> | |||
== C#のデータ型とWindows APIのデータ型 == | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! Windows APIのデータ型<br>(括弧内は対応するC言語の型) !! 対応するC#のデータ型<br>(括弧内は.NET Frameworkでの型名) !! 備考 | |||
|- | |||
| HANDLE (void *) || System.IntPtr<br>System.UIntPtr || x86は4バイト<br>x64は8バイト | |||
|- | |||
| BYTE (unsigned char) || byte (System.Byte) || | |||
|- | |||
| SHORT (short) || short (System.Int16) || | |||
|- | |||
| WORD (unsigned short) || ushort (System.UInt16) || | |||
|- | |||
| INT (int)<br>LONG (long) || int (System.Int32) || | |||
|- | |||
| UINT (unsigned int)<br>DWORD, ULONG (unsigned long) || uint (System.UInt32) || | |||
|- | |||
| BOOL (long) || bool (System.Boolean) || | |||
|- | |||
| CHAR (char) || 文字を渡すとき<br>char (System.Char)<br>文字を受け取るとき<br>StringBuilder || | |||
|- | |||
| WCHAR(wchar_t) || 文字を渡すとき<br>char (System.Char)<br>文字を受け取るとき<br>StringBuilder || | |||
|- | |||
| LPSTR (char *, char[])<br>LPWSTR (wchar_t *, wchar_t[]) || 文字を渡すとき<br>string (System.String)<br>文字を受け取るとき<br>System.Text.StringBuilder || | |||
|- | |||
| LPCSTR (const char *, const char[])<br>LPCWSTR (const wchar_t *, const wchar_t[]) || 文字を渡すとき<br>string (System.String)<br>文字を受け取るとき<br>System.Text.StringBuilder || | |||
|- | |||
| FLOAT (float) || float (System.Single) || | |||
|- | |||
| DOUBLE (double) || double (System.Double) || | |||
|} | |||
</center> | |||
<br><br> | <br><br> | ||
== サンプルコード == | == サンプルコード == | ||
==== サンプルコード 1 ==== | |||
例えば、C++ DLLから次のような関数がエクスポートされているとする。<br> | 例えば、C++ DLLから次のような関数がエクスポートされているとする。<br> | ||
<source lang="c++"> | <source lang="c++"> | ||
42行目: | 95行目: | ||
なお、Windows APIではBOOL型の実体はLONG型なので、.NET Frameworkではboolの代わりにintを指定することも可能である。<br> | なお、Windows APIではBOOL型の実体はLONG型なので、.NET Frameworkではboolの代わりにintを指定することも可能である。<br> | ||
<br> | <br> | ||
==== サンプルコード 2 ==== | |||
== サンプルコード == | |||
C++ DLLの作成方法は[[ライブラリの基礎 - DLLの作成(C/C++/MFC)|ライブラリの基礎 - DLLの作成(C/C++/MFC)]]を参照する。<br> | C++ DLLの作成方法は[[ライブラリの基礎 - DLLの作成(C/C++/MFC)|ライブラリの基礎 - DLLの作成(C/C++/MFC)]]を参照する。<br> | ||
<br> | <br> | ||
314行目: | 332行目: | ||
} | } | ||
</source> | </source> | ||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C_Sharp]] | [[カテゴリ:C_Sharp]] |