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.