对具有零元素的变量数组的结构进行编组

时间:2013-05-03 01:19:52

标签: c# interop marshalling

.NET 4 64位。我有一个C#结构,我打算编组给C

[StructLayout(LayoutKind.Sequential)]
public struct ParentStruct
{
    public float[] FArray;
    public int FArrayLength;
}

struct ParentStruct
{
    float* FArray;
    int FArrayLength;
};

这里的特殊情况是我需要复制的数组float[] FArray总是被固定并且有0个元素而我只对将指针复制到本机并且对它所具有的实际元素不感兴趣(这是没有!)也没有在免费商店(堆)上的本机端分配内存,它将指向垃圾位置,这很好。

执行此操作的技术原因是float[] FArray指向GPU内存上的地址,一旦将其封送到GPU,它将指向正确的数据。

我希望能够将此结构编组为C,但我不确定什么是正确的编组方式

  • 我尝试在当前结构中编组它,我得到了Object contains non-primitive or non-blittable data.
  • 我尝试添加[MarshalAs(UnmanagedType.LPArray)],我得到了Type 'Test.ParentStruct' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.

顺便说一句,我明白为什么我会得到这些错误,我真正想要的是一种编组的方法,因为我的数组不是一个变量数组(但它看起来像一个互操作库)并且你可以想到我的结构作为固定大小。

N.B。由于智能感知和其他约束,我必须使用float[]而不是uint或类似的东西。

0 个答案:

没有答案