「ライブラリの基礎 - C++DLL」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
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>型を渡す。(IntPtr型は汎用ポインタを表す型であり、void*型とほぼ同義)<br>
第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); // 2バイトのメモリ確保
     buffer = Marshal.AllocHGlobal(2);
     _ConvertToShort(str, buffer); // C++/DLLの関数を呼ぶ
     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>

案内メニュー