2011-06-27 2 views
0

Я пытаюсь построить структуру на C#, чтобы перейти к неуправляемому C++, мне было интересно, какой правильный тип переменной использовать для массива в моей структуре и что он должен быть составлен как.Как использовать unichar массив в C# struct с DLLImport неуправляемого C

Я уже понял это для unsigned char array

C/C++

typedef struct _foo { 
    void *fileId; 
    unsigned char fileName[15]; 
} foo; 

C#

[StructLayout(LayoutKind.Sequential)] 
public struct foo 
{ 
    public IntPtr fileId; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] 
    public string fileName; 
} 

Итак, если я следующий в C++

typedef struct _foo { 
    void *fileId; 
    unichar fileName[15]; // UTF-16LE 
} foo; 

Какая была бы правильная структура для использования в C#?

ответ

0

Указать структуру как Юникод структура:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct foo 
{ 
    public IntPtr fileId; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] 
    public string fileName; 
} 
0

Я предполагаю, что то же самое struct бы сделать, но вы должны установить DllImportAttribute.CharSetAuto свойства или по умолчанию будет Ansi. Unicode тоже будет, но если вы не используете Windows 98 или Me (без комментариев) Auto будет строками маршала как Unicode.