C#-如何封送LPWSTR数组? 我试图整理一个看起来像下面的C++结构: typedef struct _SOME_STRUCT { DWORD count; LPWSTR *items; }
“项”是LPWSTR的数组(确切数字由“计数”表示)。在C#中,我将结构表示为:C#-如何封送LPWSTR数组? 我试图整理一个看起来像下面的C++结构: typedef struct _SOME_STRUCT { DWORD count; LPWSTR *items; },c#,arrays,string,marshalling,C#,Arrays,String,Marshalling,“项”是LPWSTR的数组(确切数字由“计数”表示)。在C#中,我将结构表示为: [StructLayoutAttribute(LayoutKind.Sequential)] internal struct SOME_STRUCT { internal uint count; internal IntPtr items; } 然后在我的代码中,我做了类似的事情(mystruct是SOME_STRUCT类型): if(mystruct.count>0) { 对于(in
[StructLayoutAttribute(LayoutKind.Sequential)]
internal struct SOME_STRUCT
{
internal uint count;
internal IntPtr items;
}
然后在我的代码中,我做了类似的事情(mystruct是SOME_STRUCT类型):
if(mystruct.count>0)
{
对于(int x=0;x
计数是正确的,但字符串项出现混乱。我肯定我做了一些愚蠢的事情,因为我以前对其他类型的数组做过这项工作……只是不是LPWSTR。LPWSTR是一个“宽”字符串,即Unicode。可能对你更有效 此外,IntPtr确实重载了
+
运算符,您应该能够执行IntPtr ptr=mystruct.items+(IntPtr.Size*x)
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));
}
}