Как использовать массив unichar в C # struct с DLLImport неуправляемого C - PullRequest
0 голосов
/ 27 июня 2011

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

Я уже понял это для 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 #?

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Укажите структуру как структуру Unicode:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct foo
{
   public IntPtr fileId;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
   public string fileName;
}
0 голосов
/ 27 июня 2011

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

...