Condividi tramite


Set di caratteri e gestione dei dati

Annotazioni

Le istruzioni seguenti sono per l'uso [DllImport] e devono essere seguite manualmente per ottenere risultati corretti. Gli utenti .NET 7+ devono invece prendere in considerazione l'uso [LibraryImport] . Un analizzatore Roslyn nella casella (abilitato per impostazione predefinita) fornirà indicazioni necessarie per l'attributo [LibraryImport] nel codice.

La modalità di marshalling dei valori char, degli oggetti string e degli oggetti System.Text.StringBuilder dipende dal valore del campo CharSet sia sulla struttura che su P/Invoke. È possibile impostare l'oggetto CharSet di un P/Invoke impostando il campo DllImportAttribute.CharSet durante la dichiarazione di un P/Invoke. Per impostare il CharSet di un tipo, impostare il campo StructLayoutAttribute.CharSet nella dichiarazione della classe o dello struct. Quando questi campi di attributo non sono impostati, spetta al compilatore del linguaggio determinare quale CharSet usare. Per impostazione predefinita, C#, Visual Basic e F# usano il None set di caratteri, che ha lo stesso comportamento del Ansi set di caratteri.

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 ed emette sempre CharSet.None per impostazione predefinita.

Nella tabella seguente viene illustrato un mapping tra ogni set di caratteri e il modo in cui viene rappresentato un carattere o una stringa quando viene eseguito il marshalling con tale set di caratteri:

valore CharSet Finestre .NET Core 2.2 e versioni precedenti in Unix .NET Core 3.0 e versioni successive e Mono in Unix
Ansi char (tabella codici di Windows predefinita del sistema (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)

Assicurarsi di conoscere la rappresentazione prevista dalla rappresentazione nativa durante la selezione del set di caratteri.