Tataan karakter dan penyusunan

Catatan

Panduan berikut adalah untuk [DllImport] digunakan dan harus diikuti secara manual untuk hasil yang benar. Pengguna .NET 7+ harus mempertimbangkan untuk menggunakan [LibraryImport] sebagai gantinya. Penganalisis Roslyn dalam kotak (diaktifkan secara default) akan memberikan panduan yang [LibraryImport] diperlukan untuk atribut dalam kode Anda.

Cara char nilai, string objek, dan System.Text.StringBuilder objek di-marshalled tergantung pada nilai CharSet bidang pada P/Invoke atau struktur. Anda dapat mengatur CharSet P/Invoke dengan mengatur DllImportAttribute.CharSet bidang saat mendeklarasikan P/Invoke Anda. Untuk mengatur CharSet untuk jenis, atur StructLayoutAttribute.CharSet bidang pada kelas atau deklarasi struct Anda. Ketika bidang atribut ini tidak diatur, terserah pengkompilasi bahasa untuk menentukan mana yang CharSet akan digunakan. C#, Visual Basic, dan F# menggunakan None tataan karakter secara default, yang memiliki perilaku yang sama dengan Ansi tataan karakter.

Jika System.Runtime.InteropServices.DefaultCharSetAttribute diterapkan pada modul dalam kode C# atau Visual Basic, pengkompilasi C# atau Visual Basic akan memancarkan yang disediakan CharSet secara default alih-alih menggunakan CharSet.None. F# tidak mendukung DefaultCharSetAttribute, dan selalu memancarkan CharSet.None secara default.

Tabel berikut ini memperlihatkan pemetaan antara setiap tataan karakter dan bagaimana karakter atau string diwakili saat direpresentasikan dengan tataan karakter tersebut:

CharSet nilai Windows .NET Core 2.2 dan yang lebih lama .NET Core 3.0 dan yang lebih baru dan Mono di Unix
Ansi char(halaman kode Windows default sistem (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)

Pastikan Anda tahu representasi apa yang diharapkan representasi asli Anda saat memilih tataan karakter Anda.