C#でCのDLLでデータのやりとりをしたいときにIntPtrを使う場面が多々あります。
IntPtrの変換方法をまとめたので参考にしてください。
byte配列からIntPtrへの変換
byte[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int size = Marshal.SizeOf(array[0]) * array.Length;
IntPtr intPtr = Marshal.AllocHGlobal(size);
Marshal.Copy(array, 0, intPtr, size);
IntPtrからbyte配列への変換
var arrary2 = new byte[array.Length];
Marshal.Copy(intPtr, arrary2, 0, arrary2.Length);
どちらもMarshal.Copy
を使用することで簡単に実現可能でした。