Маршалинг нативный метод, возвращающий структуру

Обратите внимание, что это поведение по умолчанию (ANSI).

Если вы:

 SET ANSI_NULLS OFF

http://msdn.microsoft.com/en- us / library / ms188048.aspx

Вы получите разные результаты.

SET ANSI_NULLS OFF, по-видимому, уйдет в будущем ...

1
задан HojjatJafary 4 March 2019 в 14:26
поделиться

1 ответ

Вы можете сделать его более прозрачным, используя буфер фиксированного размера:

[StructLayout(LayoutKind.Sequential)]
public unsafe struct Result
{
    public byte success;
    public ErrorCode error_code;
    public fixed sbyte error_path[1025];
}

Обратите внимание, что я использовал sbyte для типа элемента массива. Это 8-битный тип, который соответствует неуправляемому типу char, который также является 8-битным типом. Вы использовали char в своем C #, который является 16-битным типом.

Возможно, вам потребуется преобразовать буфер фиксированного размера в строку, но как именно это сделать, зависит от используемой вами кодировки. Тем не менее, существует множество статей на эту тему (преобразование буфера фиксированного размера в строку), которые можно найти с помощью веб-поиска.

0
ответ дан David Heffernan 4 March 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: