如何将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;

如何将IntPtr转换为数组

试试这个:

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;
}

欢呼,凯文