void *でポインタを渡してパラメータを得る場合
DLL側の関数
DLL_API void setDataToBuffer(void *vp) {
*((int *)vp) = 5;
}
C#側の処理
// 宣言
[DllImport("DLLの名前")]
static extern void setDataToBuffer(IntPtr p);
// ボタンでテストしたのでその処理
private void button6_Click(object sender, EventArgs e)
{
// データを保存する領域を確保する
IntPtr buf = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(Int32)));
// DLL呼び出し
setDataToBuffer(buf);
// Marshalで書き込まれているIntPtrの内容を読み出し
textBox6.Text = Marshal.ReadInt32(buf).ToString();
// allocしたメモリを解放
Marshal.FreeCoTaskMem(buf);
}
毎回、Allocするのやだなーと思うので、改良できないのか考えてみる