むずかしいことはわかりません

いろいろ書いてるみたいな

void *でポインタを渡してパラメータを得る場合

C#C++で書いたDLLを連携するときのメモ

 

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するのやだなーと思うので、改良できないのか考えてみる