2

.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.

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

注意,由于智能感知和其他限制,我必须使用 afloat[]而不是 auint或类似的东西。

4

0 回答 0