注
次のガイダンスは [DllImport]
使用を目的としており、正しい結果を得るには手動で従う必要があります。 .NET 7 以降のユーザーは、代わりに [LibraryImport]
の使用を検討する必要があります。 インボックス Roslyn アナライザー (既定で有効) は、コード内の [LibraryImport]
属性に必要なガイダンスを提供します。
値、string
オブジェクト、およびSystem.Text.StringBuilder
オブジェクトchar
方法は、P/Invoke または構造体のCharSet
フィールドの値によって異なります。 P/Invoke の CharSet
を設定するには、P/Invoke を宣言するときに DllImportAttribute.CharSet フィールドを設定します。 型の CharSet
を設定するには、クラスまたは構造体の宣言で StructLayoutAttribute.CharSet フィールドを設定します。 これらの属性フィールドが設定されていない場合、使用する CharSet
は言語コンパイラによって決定されます。 C#、Visual Basic、および F# では、Ansi文字セットと同じ動作を持つNone文字セットが既定で使用されます。
System.Runtime.InteropServices.DefaultCharSetAttributeが C# または Visual Basic コードのモジュールに適用されている場合、C# または Visual Basic コンパイラは、CharSet.None
を使用するのではなく、既定で指定されたCharSet
を出力します。 F# は DefaultCharSetAttribute
をサポートせず、既定では常に CharSet.None
を出力します。
次の表は、各文字セット間のマッピングと、その文字セットでマーシャリングされるときに文字または文字列がどのように表されるかを示しています。
CharSet 価値 |
ウィンドウズ | Unix 上の .NET Core 2.2 以前 | Unix 上の .NET Core 3.0 以降と Mono |
---|---|---|---|
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) |
文字セットを選択するときにネイティブ表現で想定される表現がわかっていることを確認します。
.NET