C# - 如何编码 LPWSTR 数组?

标签 c# arrays string marshalling

我正在尝试编码一个如下所示的 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。

最佳答案

LPWSTR 是一个“宽”字符串,即 Unicode。 PtrToStringUni可能会更适合您。

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

关于C# - 如何编码 LPWSTR 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234739/

相关文章:

c# - 将 XML 转换为通用列表

C++ 调试断言失败的字符串数组

c# - 枚举文字

c# - LINQ to SQL (NHibernate) : OrderBy vs OrderByDescending abstraction

c# - 对象引用未设置到对象错误的实例

c++ - C++ 中的列表数组。指针;/

jquery - Rails 无法正确解码来自 jQuery 的 JSON(数组变成带有整数键的散列)

C++ 3d array - 动态内存分配在一行中对齐

c# - 在 C# 中将字符串转换为十六进制字符串

java char的unicode值