我有一个 IntPtr,它是一个指向结构数组的指针,我正在尝试将其转换为数组。
我试过了
Marshal.Copy(srcIntPtr, destIntPtrArray, 0, destIntPtrArray.Length);
但是在完成复制之后,我无法将目标数组内部的 IntPtr 转换为所需的结构,而我可以将 srcIntPtr 转换为结构,这当然只会给我第一个索引的数据。看起来在完成复制之后,目标数组包含一堆损坏的 IntPtr
我也试过
var size = Marshal.SizeOf(Marshal.ReadIntPtr(myIntPtr));
for (int i = 0; i < length; i++)
{
IntPtr iP = new IntPtr(myIntPtr.ToInt64() + i * size);
MyStruct ms =
(MyStruct ) Marshal.PtrToStructure(iP, typeof(MyStruct ));
}
这不会引发任何错误,但是我从源 IntPtr 中获取的结构数组的数据不准确。
这是我要转换为的结构
struct MyStruct
{
public Categories categories;
public Dimensions dimensions;
}
public struct Categories {
public double d;
public double c;
public double b;
public double a;
}
struct Dimensions {
public double v;
public double e;
}
我[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
在结构之上,但删除它并不会破坏我的代码。
提前致谢