C # - как упорядочить массив LPWSTR? - PullRequest
3 голосов
/ 04 июня 2011

Я пытаюсь упорядочить структуру 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.

1 Ответ

5 голосов
/ 04 июня 2011

LPWSTR - это широкая строка, то есть Unicode. PtrToStringUni , вероятно, будет работать лучше для вас.

Кроме того, IntPtr перегружен оператор +, вы должны быть в состоянии сделать IntPtr ptr = mystruct.items + (IntPtr.Size * x)

...