C#interop:处理非托管结构中的指针数组

时间:2010-08-10 07:51:57

标签: c# pointers interop unmanaged

我正在打电话给非管理的Aubio库dll(Aubio.org), 我想知道处理Aubio samplebuffer的好方法。

它的定义如下:

// 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,我如何使用指针数组执行此操作?)

1 个答案:

答案 0 :(得分:0)

我想你可以定义一个托管结构和PtrToStructure你有什么,修改,然后StructureToPtr(回到同一个位置),但它可能就是这么简单,因为内存已经分配了所有,只是读出数组的intptr,然后使用Copy:

将float数组写入它们

http://msdn.microsoft.com/en-us/library/ez2e4559.aspx