.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
或类似的东西。