繁体   English   中英

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

[英]C# interop : handling pointer-array in unmanaged struct

我正在包装对非托管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,以及如何使用指针数组?)

我以为您可以定义托管结构和PtrToStructure所拥有的内容,然后进行修改,然后再修改StructureToPtr(返回相同的位置),但这可能就这么简单,因为已经分配了内存,并且所有这些都可以读出数组的intptr,然后使用Copy将float数组写入它们:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM