Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Следующие указания по [DllImport]
использованию должны быть вручную выполнены для получения правильных результатов. Пользователям .NET 7+ следует рассмотреть возможность использования [LibraryImport]
вместо этого. Встроенный анализатор Roslyn (включен по умолчанию) предоставит необходимые рекомендации для атрибута [LibraryImport]
в коде.
Способ маршалинга значений char
, объектов string
и объектов System.Text.StringBuilder
зависит от значения поля CharSet
, связанным как с P/Invoke, так и со структурой. Вы можете задать CharSet
для P/Invoke, задав поле DllImportAttribute.CharSet при объявлении P/Invoke. Чтобы установить CharSet
для типа, задайте StructLayoutAttribute.CharSet поле в объявлении вашего класса или структуры. Если эти поля атрибута не заданы, компилятор языка определяет, какой CharSet
из них следует использовать. C#, Visual Basic и F# используют None набор символов по умолчанию, который ведет себя так же, как Ansi набор символов.
Если применяется System.Runtime.InteropServices.DefaultCharSetAttribute к модулю в коде C# или Visual Basic, компилятор C# или Visual Basic будет выдавать предоставленный CharSet
по умолчанию код вместо использования CharSet.None
. F# не поддерживает DefaultCharSetAttribute
и всегда выдает CharSet.None
по умолчанию.
В следующей таблице показано сопоставление между каждым набором знаков и способом представления символа или строки при преобразовании с использованием этого набора.
Значение CharSet |
Виндоус | .NET Core 2.2 и более ранних версий в Unix | .NET Core 3.0 и более поздних версий и Mono в Unix |
---|---|---|---|
Ansi |
char
(кодовая страница Windows (ANSI) по умолчанию системы) |
char (UTF-8) |
char (UTF-8) |
Unicode |
wchar_t (UTF-16) |
char16_t (UTF-16) |
char16_t (UTF-16) |
Auto |
wchar_t (UTF-16) |
char16_t (UTF-16) |
char (UTF-8) |
Убедитесь, что вы знаете, какое представление ожидается вашей внутренней кодировкой при выборе набора символов.