Domanda

Abbiamo codice nativo Win32 C ++ e una serie di C # assemblee che vogliamo chiamare dal codice C ++. I riassunti i nostri OptioS come:

  1. Usa COM. Il codice C # dovrebbe essere decorato con attributi aggiuntivi (GUID, ComVisible). C # assemblee avrebbe bisogno di essere regasm registrato e sarebbero quindi a disposizione del C ++ nativo codice tramite COM.

  2. Utilizzare una classe wrapper C ++ / CLI (precedentemente gestita C ++). Una classe C ++ potrebbe essere aggiunto al progetto nativo C ++. Quella classe sarebbe stato compilato con / CLR. Il codice nativo C ++ avrebbe chiamato la classe ++ / CLI C che avrebbe poi chiamare il codice .Net. No COM coinvolto. Il CLR viene avviato per magia, come richiesto con smistamento gestito dalle extenstions C ++ / CLI.

  3. Host un'istanza del CLR nel codice nativo C ++.

ho intenzione di scontare l'opzione 3 come io non vedo i benefici oltre l'opzione 2 diversa perdiamo la necessità di una classe wrapper. Quindi la domanda è, quali sono i pro / contro delle opzioni 1 contro l'opzione 2?

Grazie in anticipo.

È stato utile?

Soluzione

L'opzione 2 si esibirà il meglio, ed essere il più trasparente e gestibile, IMO.

Non c'è davvero alcun vantaggio per l'opzione 1 che ho trovato. Utilizzando C ++ / CLI sembra funzionare molto meglio, lavorare più velocemente, e di essere molto più semplice in generale.

È anche possibile, btw, basta utilizzare l'assembly C # direttamente senza avere una classe wrapper. Ciò richiede la compilazione di tutti i file che vogliono utilizzarlo con / CLR, ma funziona abbastanza bene.

Altri suggerimenti

Per l'opzione 1 tua pro principale sarebbe quella di non dover scrivere una classe wrapper che può ottenere peloso a seconda del progetto.

Per l'opzione 2 non sarà necessario modificare la vostra libreria gestita per facilitare l'uso non gestito, che a volte non è un'opzione.

Per me si tratta di in cui si desidera apportare le modifiche al codice.

Con l'opzione 2 si hanno anche un modo piuttosto semplice di convertire successivamente tutta l'applicazione per C ++ / CLI per evitare i gestite transizioni / non gestiti che si ottengono. Le transizioni potrebbe essere un problema a seconda di come si utilizza assembly referenziati vale a dire ottenere un calo di prestazioni.

Finora ho avuto solo esperienze positive con C ++ / CLI e posso consigliare di andare quell'itinerario.

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