C ++ chiamando C opzioni #
-
21-08-2019 - |
Domanda
Abbiamo codice nativo Win32 C ++ e una serie di C # assemblee che vogliamo chiamare dal codice C ++. I riassunti i nostri OptioS come:
-
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.
-
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.
-
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.
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.