13,007
回編集
編集の要約なし |
|||
281行目: | 281行目: | ||
</source> | </source> | ||
<br> | <br> | ||
上記の関数において、C# EXEから使用する時は、第1引数の<code>char*</code>型は文字列なので、<code>string</code>型を渡す。<br> | 上記の関数において、C# EXEから使用する時は、第1引数の<code>char*</code>型は文字列なので、<code>string</code>型または<code>StringBuilder</code>型を渡す。<br> | ||
第2引数の<code>short*</code>型は、<code>IntPtr</code>型を渡す。( | 第2引数の<code>short*</code>型は、<code>IntPtr</code>型を渡す。(<code>IntPtr</code>型は汎用ポインタを表す型であり、<code>void*</code>型とほぼ同義)<br> | ||
<br> | <br> | ||
ただし、C#は厳しい型付け言語なので、曖昧さを解決するために変換メソッドを経由する必要がある。<br> | ただし、C#は厳しい型付け言語なので、曖昧さを解決するために変換メソッドを経由する必要がある。<br> | ||
299行目: | 299行目: | ||
public static short ConvertToShort(string str) | public static short ConvertToShort(string str) | ||
{ | { | ||
// 2バイトのメモリ確保 | |||
IntPtr buffer = new IntPtr(); | IntPtr buffer = new IntPtr(); | ||
buffer = Marshal.AllocHGlobal(2); | buffer = Marshal.AllocHGlobal(2); | ||
_ConvertToShort(str, buffer); | |||
short sval = Marshal.ReadInt16(buffer); // | / C++ DLLの関数を呼ぶ | ||
Marshal.FreeHGlobal(buffer); | _ConvertToShort(str, buffer); | ||
// 2バイトのメモリをshort型に変換 | |||
short sval = Marshal.ReadInt16(buffer); | |||
// メモリの開放 | |||
Marshal.FreeHGlobal(buffer); | |||
return sval; | return sval; | ||
} | } | ||
314行目: | 322行目: | ||
なお、Windows APIではBOOL型の実体はLONG型なので、.NET Frameworkではboolの代わりにintを指定することも可能である。<br> | なお、Windows APIではBOOL型の実体はLONG型なので、.NET Frameworkではboolの代わりにintを指定することも可能である。<br> | ||
<br> | <br> | ||
==== サンプルコード 2 ==== | ==== サンプルコード 2 ==== | ||
C++ DLLの作成方法は[[ライブラリの基礎 - DLLの作成(C/C++/MFC)|ライブラリの基礎 - DLLの作成(C/C++/MFC)]]を参照する。<br> | C++ DLLの作成方法は[[ライブラリの基礎 - DLLの作成(C/C++/MFC)|ライブラリの基礎 - DLLの作成(C/C++/MFC)]]を参照する。<br> |