【发布时间】:2010-08-10 07:51:57
【问题描述】:
我正在包装一些对非托管 Aubio 库 dll (Aubio.org) 的调用, 我想知道处理 Aubio 样本缓冲区的好方法是什么。
它是这样定义的:
// Buffer for real values
struct _fvec_t {
uint length; // length of buffer
uint channels; // number of channels
float **data; // data array of size [length] * [channels]
};
Aubio 为我创建了正确设置数据成员的结构,因此我得到了一个 IntPtr。 我需要从我的 C# 代码中读取/写入数据指针。
for (int chan_idx = 0; chan_idx < my_fvec.channels; ++chan_idx)
for (int i=0; i<something; i++)
my_fvec.data[chan_idx][i] = SomeRandomValue();
将 C# 结构“映射”到 fvec_t 类型以便我可以正确访问数据成员以读取/写入它的正确方法是什么?
(或者我应该使用 Marshal.Copy,以及如何使用指针数组来做到这一点?)
【问题讨论】:
-
只是 Marshal.Copy 方法的一个想法:如果它是一个指针数组,您可以将数据指针编组到 IntPtr 数组,然后分别编组每个 IntPtr。不知道这是否是最好的主意。
-
我同意 OregonGhost。或者在 C# 中使用不安全代码和“真实”指针。
标签: c# pointers interop unmanaged