Karakter kümesi ve hazırlama
Not
Aşağıdaki kılavuz kullanım içindir [DllImport]
ve doğru sonuçlar için el ile izlenmesi gerekir. .NET 7+ kullanıcıları bunun yerine kullanmayı [LibraryImport]
düşünmelidir. Yerleşik Roslyn çözümleyicisi (varsayılan olarak etkindir), kodunuzdaki [LibraryImport]
öznitelik için gerekli yönergeleri sağlar.
char
Değerlerin, string
nesnelerin ve System.Text.StringBuilder
nesnelerin nasıl sıralandığı P/Invoke veya yapısındaki alanın değerine CharSet
bağlıdır. P/Invoke'unuzu bildirirken alanı ayarlayarak DllImportAttribute.CharSet P/Invoke değerini ayarlayabilirsinizCharSet
. Türünü ayarlamak CharSet
için sınıfınızdaki veya yapı bildiriminizdeki alanı ayarlayın StructLayoutAttribute.CharSet . Bu öznitelik alanları ayarlanmadığında, hangisinin CharSet
kullanılacağını belirlemek dil derleyicisine bağlıdır. C#, Visual Basic ve F# karakter kümesiyle None aynı davranışa Ansi sahip olan karakter kümesi varsayılan olarak kullanılır.
modülüne System.Runtime.InteropServices.DefaultCharSetAttribute C# veya Visual Basic kodunda uygulanırsa, C# veya Visual Basic derleyicisi kullanmak CharSet.None
yerine varsayılan olarak sağlanan CharSet
öğesini yayar. F# öğesini desteklemez DefaultCharSetAttribute
ve her zaman varsayılan olarak yayar CharSet.None
.
Aşağıdaki tabloda her karakter kümesi arasındaki eşleme ve bu karakter kümesiyle birlikte sıralandığında bir karakter veya dizenin nasıl temsil edilir olduğu gösterilmektedir:
CharSet Değer |
Windows | Unix üzerinde .NET Core 2.2 ve öncesi | .NET Core 3.0 ve üzeri ve Unix üzerinde Mono |
---|---|---|---|
Ansi |
char (sistem varsayılanı Windows (ANSI) kod sayfası) |
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) |
Karakter kümenizi seçerken yerel gösteriminizin hangi gösterimi beklediğini bildiğinizden emin olun.