共用方式為


字元集和封送處理

備註

下列指引適用於 [DllImport] 使用,必須手動遵循才能取得正確的結果。 .NET 7+ 使用者應該考慮改用 [LibraryImport] 。 內建的 Roslyn 分析器(預設為啟用)將為程式碼中的 [LibraryImport] 屬性提供必要的指引。

char 值、string 物件和 System.Text.StringBuilder 物件的封送處理方式取決於 P/Invoke 或結構中的 CharSet 欄位值。 您可以透過在宣告 P/Invoke 時設定 CharSet 欄位,來設定 P/Invoke 的 DllImportAttribute.CharSet。 若要設定 CharSet 類型的欄位,請在類別或結構宣告上設定 StructLayoutAttribute.CharSet 欄位。 如果未設定這些屬性欄位,則由語言編譯程式決定要使用哪一個 CharSet 。 C#、Visual Basic 和 F# 預設會使用 None charset,其行為與 Ansi charset 相同。

System.Runtime.InteropServices.DefaultCharSetAttribute如果在 C# 或 Visual Basic 程式代碼的模組上套用 ,則 C# 或 Visual Basic 編譯程式預設會發出提供的 CharSet ,而不是使用 CharSet.None。 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)

請確定您在挑選字元集時,知道原生表示法預期的表示法。