Domanda

Quando dovremmo usare questo attributo e perché ne abbiamo bisogno? Ad esempio, se la funzione nativa in C prende come parametro un puntatore per il carbone senza segno, e so che è necessario soddisfare l'array di carattere senza segno, perché non posso usare una matrice di byte in c# per usare questa funzione? È necessario fare marshalling?

È stato utile?

Soluzione

Il runtime sarà in grado di determinare automaticamente come marshalla i dati tra il codice nativo e gestito nella maggior parte dei casi, quindi generalmente non è necessario specificare l'attributo. MarshalAs è necessario solo quando c'è un'ambiguità nella definizione (e si desidera dire il runtime precisamente come marshall dei dati) o se si richiede un comportamento non default.

Nella mia esperienza, MarshalAs è davvero richiesto solo quando si lavora con le stringhe, poiché ci sono così tante rappresentazioni diverse nel codice nativo; Unicode/ANSI, C-Strings o no, ecc.

Altri suggerimenti

Ulteriore uso dell'attributo dei marescialati è il marshalling di array di dimensioni fisse (comprese le stringhe di dimensioni fisse) con parametri di Byvalarray e SizeConst. Ad esempio, molte strutture dell'API di Windows contengono stringhe di dimensioni fisse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top