Domanda

Mi chiedevo su come passare una stringa o uno StringBuilder ad una funzione C che uscita un parametro stringa. Ho trovato una grande risposta in

Chiamata funzione non gestita da C #: dovrei passare StringBuilder o utilizzare codice non sicuro

?

Ma ho un dubbio. Chiunque può spiegare a me perché il garbage collector non consente di spostare il (gestito) istanza StringBuilder durante l'esecuzione della funzione importata?

È stato utile?

Soluzione

predefinito Marshalling per archi per i dettagli su come corda e StringBuilder è marshalling quando si utilizza COM e P / Invoke. Non dice esplicitamente perché il tipo di utilizzo è sicuro, ma non indica che l'uso di corde e StringBuilder per P / Invoke è supportato e destinato comportamento. Ho il sospetto che il sistema di smistamento prende cura di pinning il buffer per la durata della chiamata esterna, impedendo il GC da spostarla.

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