正在将动态数组封送至C#委托(回调)
本文关键字:委托 回调 动态 数组 | 更新日期: 2023-09-27 18:29:20
我有一些本机C/C++代码,它调用C#委托作为回调。传递动态数组参数的最佳实践是什么?实际上,C指针是struct
的数据成员,我将结构传递给回调。
用IntPtr
做这样的事情可以吗?
struct Data {
... (other data members)
double* array;
int size;
};
数组是指向在C++代码中分配的数组的指针(只是对new
或malloc
的调用)。在C#方面,代表期望
struct Data {
... (other data members)
IntPtr array;
int size;
}
我担心的是…IntPtr
应该使用Marshal.AllocHGlobal
分配内存吗?或者,如果它是在我的C++代码(new
或malloc
)中分配的内存,它是否也安全?
使用IntPtr
是正确的。内存在非托管端进行分配和解除分配。因此,您不应该在托管端执行与分配和释放相关的任何操作。
只需使用Marshal.Copy
对阵列进行读取或写入即可。或者,如果您喜欢使用unsafe
块并将IntPtr
解释为double*
。