如何解决C#-如何封送LPWSTR数组?
| 我试图封送一个看起来像下面的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是一个\'wide \'字符串,即Unicode。 PtrToStringUni可能会为您更好地工作。
另外,IntPtr确实使
+
运算符重载,您应该能够执行IntPtr ptr = mystruct.items + (IntPtr.Size * x)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。