簡體   English   中英

封送處理類型數組的指針(托管C#->非托管C ++)

[英]Marshaling a pointer to an array of types (managed C# -> unmanaged C++)

我在解決一種表示結構的方法上遇到了麻煩,該結構包含一個指向托管代碼中短褲數組的指針。 該結構如下所示:

typedef struct
{
    short size;
    unsigned short** shortValues;
} UnmanagedStruct;

shortValues ”的內存是在非托管代碼中分配的-因此,即使該字段只是指向短值數組的指針,也添加了附加級別的間接尋址,以便調用者(托管代碼)也可以看到分配的內存。 size ”字段表示數組中元素的數量。 我該如何在托管代碼中表示呢?

我以為只在IntPtr傳遞了它,所以一旦非托管調用返回,我想不通如何訪問這些值。

不安全的代碼可以嗎?

public unsafe struct UnmanagedStruct
{
    public short size;
    public ushort** shortValues;
}

[DllImport("example.dll")]
public static extern void GetUnmanagedStruct(out UnmanagedStruct s);

如果您有一個指向ushort數組的指針:

public static unsafe void WriteValues()
{
    UnmanagedStruct s;
    GetUnmanagedStruct(out s);
    for (var i = 0; i < s.size; i++)
    {
        ushort x = (*s.shortValues)[i];
        Console.WriteLine(x);
    }
}

如果您有ushort s的以null結尾的數組:

public static unsafe void WriteValues()
{
    UnmanagedStruct s;
    GetUnmanagedStruct(out s);
    for (var i = 0; i < s.size; i++)
    {
        for (ushort* p = s.shortValues[i]; p != null; p++)
        {
            ushort x = *p;
            Console.WriteLine(x);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM