我正在尝试编组一个类似于以下内容的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。
答案 0 :(得分:5)
LPWSTR是一个“宽”字符串,即Unicode。 PtrToStringUni可能会更适合您。
此外,IntPtr确实重载+
运算符,您应该可以执行IntPtr ptr = mystruct.items + (IntPtr.Size * x)