分類:[C#] 
 
 VisualStudio2019で、C#の学習をしております。
当方、C++やJAVA等の他言語は多少の経験がありますが、C#は未経験です。
■やりたいこと
Cで書かれたDLL内に実装している、以下のような関数を、C#から呼び出したい。
[comm.h]
extern "C" COMM_API void PointerTest(char* buf);
[comm.cpp]
// 渡されたバッファに5byte分のデータをセットする
void PointerTest(char* buf)
{
  buf[0] = 0x00;
  buf[1] = 0x10;
  buf[2] = 0x20;
  buf[3] = 0x30;
  buf[4] = 0x40;
}
■困っていること
C#側で、どのように呼び出せばよいのか分かりません。
DLL側でセットする内容が文字列なら、string型変数を引数に渡せばよいのでしょうが、文字列ではないので「IntPtr」型変数を渡す?
[test.cs]
byte[] data = new byte[10];  // 最終的に、このバッファに値をセットしたい
IntPtr buffer = new IntPtr();
buffer = Marshal.AllocHGlobal(10);
PointerTest(buf);
data = Marshal.ReadIntPtr(buffer);  // ←コンパイルエラーなので、この行が間違っている?
Marshal.FreeHGlobal(buffer);
よろしくお願いします。
  |