分類:[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);
よろしくお願いします。
|