Teckenuppsättningar och marshalling
Kommentar
Följande vägledning är avsedd för [DllImport]
användning och måste följas manuellt för att få korrekta resultat. .NET 7+ användare bör överväga att använda [LibraryImport]
i stället. En inbyggd Roslyn-analysator (aktiverad som standard) ger nödvändig vägledning för [LibraryImport]
attributet i koden.
Hur char
värden, string
objekt och System.Text.StringBuilder
objekt ordnas beror på värdet CharSet
för fältet på antingen P/Invoke eller -strukturen. Du kan ange CharSet
P/Invoke genom att ange DllImportAttribute.CharSet fältet när du deklarerar P/Invoke. CharSet
Ange för en typ genom att ange fältet StructLayoutAttribute.CharSet på din klass- eller structdeklaration. När dessa attributfält inte har angetts är det upp till språkkompilatorn att avgöra vilken som CharSet
ska användas. C#, Visual Basic och F# använder teckenuppsättningen None som standard, som har samma beteende som teckenuppsättningen Ansi .
System.Runtime.InteropServices.DefaultCharSetAttribute Om används på modulen i C# eller Visual Basic-koden genererar C# eller Visual Basic-kompilatorn den som tillhandahålls CharSet
som standard i stället för att använda CharSet.None
. F# stöder DefaultCharSetAttribute
inte , och genererar CharSet.None
alltid som standard.
I följande tabell visas en mappning mellan varje teckenuppsättning och hur ett tecken eller en sträng representeras när den är kopplad till den teckenuppsättningen:
CharSet Värde |
Windows | .NET Core 2.2 och tidigare på Unix | .NET Core 3.0 och senare och Mono på Unix |
---|---|---|---|
Ansi |
char (systemets standardvärde Windows-kodsida (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) |
Se till att du vet vilken representation din inbyggda representation förväntar sig när du väljer din teckenuppsättning.