如何将IntPtr转换为数组
本文关键字:数组 转换 IntPtr | 更新日期: 2023-09-27 18:06:35
如何将IntPtr
转换为数组。实际上,我从非托管dll调用了这个函数。它返回IntPtr
。现在我需要把它转换成一个数组。请大家出个主意。代码片段如下:
Unmanaged function declared
[DllImport("NLib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe IntPtr N_AllocPt1dArray(NL_INDEX n, ref stacks S);
调用函数
void Function1()
{
IntPtr PPtr=N_AllocPt1dArray(n, ref S);
}
现在我需要将PPtr
转换为数组(数组为demo[]
)。其中demo由
public unsafe struct demo
{
public int x ;
public int y ;
public int z ;
}demo DEMO;
试试这个:
array[0] = (demo)System.Runtime.InteropServices.Marshal.PtrToStructure(PPtr , typeof(demo));
更新:解决方案2就是您所需要的。
这取决于你所指向的数据类型,接下来的代码从IntPtr中获得字符串数组:
nstring是期望得到的元素数目。
你可以修改代码来满足你的需要,但这可以让你了解如何从非托管块代码中的IntPtr中检索数据。
private string[] ConvertIntPtrToStringArray(IntPtr p, int nstring)
{
//Marshal.ptr
string[] s = new string[nstring];
char[] word;
int i, j, size;
unsafe
{
byte** str = (byte**)p.ToPointer();
i = 0;
while (i < nstring)
{
j = 0;
while (str[i][j] != 0)
j++;
size = j;
word = new char[size];
j = 0;
while (str[i][j] != 0)
{
word[j] = (char)str[i][j];
j++;
}
s[i] = new string(word);
i++;
}
}
return s;
}
欢呼,凯文