gpt4 book ai didi

c# - 从 IntPtr 获取结构数组

转载 作者:可可西里 更新时间:2023-11-01 09:09:11 25 4
gpt4 key购买 nike

我有这样的结构

struct MyStruct
{
public int field1;
public int field2;
public int field3;
}

我有指向这个结构数组的指针。所以,我需要从这个指针获取数组。我尝试使用 Marshal.PtrToStructure,但出现内存读取错误。这是我的方法:

public MyStruct[] GetArrayOfStruct(IntPtr pointerToStruct, int length)
{
var sizeInBytes = Marshal.SizeOf(typeof(TCnt));
MyStruct[] output = new MyStruct[length];

for (int i = 0; i < length; i++)
{
IntPtr p = new IntPtr((pointerToStruct.ToInt32() + i * sizeInBytes));

output[i] = (MyStruct)System.Runtime.InteropServices.Marshal.PtrToStructure(p, typeof(MyStruct));
}

return output;
}

那么,我做错了什么?

最佳答案

这个函数对我有用,假设结构的大小是固定的:

public static void MarshalUnmananagedArray2Struct<T>(IntPtr unmanagedArray, int length, out T[] mangagedArray)
{
var size = Marshal.SizeOf(typeof(T));
mangagedArray = new T[length];

for (int i = 0; i < length; i++)
{
IntPtr ins = new IntPtr(unmanagedArray.ToInt64() + i * size);
mangagedArray[i] = Marshal.PtrToStructure<T>(ins);
}
}

关于c# - 从 IntPtr 获取结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com