Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-如何封送LPWSTR数组? 我试图整理一个看起来像下面的C++结构: typedef struct _SOME_STRUCT { DWORD count; LPWSTR *items; }_C#_Arrays_String_Marshalling - Fatal编程技术网

C#-如何封送LPWSTR数组? 我试图整理一个看起来像下面的C++结构: typedef struct _SOME_STRUCT { DWORD count; LPWSTR *items; }

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

“项”是LPWSTR的数组(确切数字由“计数”表示)。在C#中,我将结构表示为:

[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));
    }
}