Set di caratteri e marshalling
Nota
Le indicazioni seguenti sono relative all'uso di [DllImport]
e devono essere seguite manualmente per ottenere risultati corretti. Gli utenti di .NET 7+ devono invece prendere in considerazione l'uso di [LibraryImport]
. Un analizzatore Roslyn nella casella (abilitato per impostazione predefinita) fornirà indicazioni necessarie per l'attributo [LibraryImport]
nel codice.
Il modo in cui viene effettuato il marshalling dei valori char
, degli oggetti string
e degli oggetti System.Text.StringBuilder
dipende dal valore del campo CharSet
per P/Invoke o la struttura. È possibile impostare il CharSet
di P/Invoke, impostando il campo DllImportAttribute.CharSet al momento della dichiarazione di P/Invoke. Per impostare l'oggetto CharSet
per un tipo, impostare il campo StructLayoutAttribute.CharSet nella dichiarazione di classe o struct. Quando questi campi attributo non vengono impostati, dipende dal compilatore del linguaggio determinare quale CharSet
usare. Per impostazione predefinita, C#, Visual Basic e F# usano il set di caratteri None, che ha lo stesso comportamento del set di caratteri Ansi.
Se l'oggetto System.Runtime.InteropServices.DefaultCharSetAttribute viene applicato al modulo nel codice C# o Visual Basic, il compilatore C# o Visual Basic genererà l'oggetto fornito CharSet
per impostazione predefinita anziché usare CharSet.None
. F# non supporta DefaultCharSetAttribute
e genera sempre CharSet.None
per impostazione predefinita.
La tabella seguente mostra il mapping tra ogni set di caratteri e la rappresentazione di un carattere o una stringa quando sottoposto a marshalling con tale set di caratteri:
Valore CharSet |
Windows | .NET Core 2.2 e versioni precedenti in Unix | .NET core 3.0 e versioni successive e Mono in Unix |
---|---|---|---|
Ansi |
char (tabella codici Windows (ANSI) predefinita del sistema) |
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) |
Assicurarsi di conoscere la rappresentazione prevista dalla rappresentazione nativa quando si seleziona il set di caratteri.