C# - 如何封送 LPWSTR 数组?

3

我正在尝试编组一个类似以下结构的C ++结构:

typedef struct _SOME_STRUCT
{
     DWORD count;
     LPWSTR *items;
}

“items”是LPWSTR的数组(确切数量由“count”指示)。在C#中,我将该结构表示为:
[StructLayoutAttribute(LayoutKind.Sequential)]
internal struct SOME_STRUCT
{    
     internal uint count;
     internal IntPtr items;
}

然后在我的代码中,我正在像这样做(其中mystruct是类型为SOME_STRUCT的):

if (mystruct.count > 0)
{
    for (int x = 0; x < mystruct.count; x++)
    {
        IntPtr ptr = new IntPtr(mystruct.items.ToInt64() + IntPtr.Size * x);
        string item = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(ptr));
    }
}

计数是正确的,但字符串项输出的是乱码。我确定我一定做了些傻事,因为我之前在其他类型的数组中实现过这个功能...只是没有在LPWSTR中。
1个回答

5

LPWSTR是宽字符字符串,即Unicode。对于您来说,PtrToStringUni可能会更好地工作。

另外,IntPtr确实有+运算符重载,您应该能够执行IntPtr ptr = mystruct.items + (IntPtr.Size * x)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接