Domanda

Ciò che è di smistamento e perché ne abbiamo bisogno?

Trovo difficile credere che non posso inviare una int sul filo da C # a C e devono marshall esso. Perché non è possibile C # è sufficiente inviare i 32 bit sopra con un punto di partenza e il segnale di terminazione, dicendo codice C che ha ricevuto un int?

Se ci sono buoni tutorial o siti sul perché abbiamo bisogno di smistamento e come usarlo, che sarebbe grande.

È stato utile?

Soluzione

A causa linguaggi e ambienti diversi hanno diverse convenzioni di chiamata, diverse convenzioni di layout, diverse dimensioni di primitive (cfr char in C # e char in C), la creazione di oggetto diverso / convegni distruzione, e le linee guida di progettazione diversi. Avete bisogno di un modo per ottenere la roba fuori di un territorio gestito in un posto dove la terra non gestito può vedere e capire e viceversa. Questo è ciò che è per di smistamento.

Altri suggerimenti

NET codice (C #, VB) si chiama "gestito" perché è "gestito" dal CLR ( Common Language Runtime )

Se si scrive il codice in C o C ++ o Assembler è tutto definito "non gestito", dal momento che nessun CLR è coinvolto. L'utente è responsabile per tutti allocazione di memoria / de-allocazione.

Marshalling è il processo tra il codice gestito e codice non gestito; Si tratta di uno dei servizi più importanti offerti dal CLR .

Marshalling un int è ideale proprio quello che hai detto: la copia della memoria dallo stack gestito del CLR in un posto in cui il codice C può vederlo. stringhe di smistamento, oggetti, array e altri tipi sono le cose difficili.

Ma l'/ strato di interoperabilità Invoke P si prende cura di quasi tutte queste cose per voi.

Come Vinko dice nei commenti, è possibile passare tipi primitivi senza alcun marshalling speciale. Questi sono chiamati tipi "copiabili" e includono tipi come byte, short, int, long, ecc e le loro controparti non firmati.

Questa pagina contiene l'elenco dei copiabili e non copiabili tipi .

Marshalling è un "medium" per mancanza di una parola migliore o un gateway, per comunicare con i tipi di dati di tutto il mondo non gestito e viceversa, utilizzando il PInvoke, e assicura i dati vengono restituiti indietro in modo sicuro.

Marshalling passa firma di una funzione a un processo differente che è su un machin diverso, e di solito è attuato mediante conversione di dati strutturati in un formato dedicato, che può essere trasferito ad altri sistemi processesor (serializzazione / deserializzazione)

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