我有一些本地C / C ++代码,它们将C#委托称为回调。传递动态数组参数的最佳做法是什么?实际上C指针是struct
的数据成员,我将结构传递给回调。
使用IntPtr
做这样的事情可以吗?
struct Data {
... (other data members)
double* array;
int size;
};
Array是指向在我的C ++代码中分配的数组的指针(只需调用new
或malloc
)。在C#方面,代表期望
struct Data {
... (other data members)
IntPtr array;
int size;
}
我关心的是......应IntPtr
使用Marshal.AllocHGlobal
分配内存,还是在我的C ++代码(new
或malloc
中分配内存时也是安全的?
答案 0 :(得分:3)
使用IntPtr
是正确的。内存已分配,并在非托管端解除分配。因此,您应该在管理方面做与分配和解除分配无关的任何事情。
只需使用Marshal.Copy
读取或写入数组即可。或者,如果您更喜欢使用unsafe
块并将IntPtr
解释为double*
。