Avvolgimento di Visual C ++ in C #
-
08-07-2019 - |
Domanda
Devo fare un'iniezione di processo usando C ++ ma preferirei usare C # per tutto tranne che per cose di basso livello. Ho sentito parlare di " funzione wrapping " e "marshalling" e ho fatto un bel po 'di ricerche su Google e ho trovato un po' di informazioni qua e là ma mi manca ancora davvero.
Cose che ho letto in ordine di utilità;
http://msdn.microsoft.com/en-us /library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/ 08 / calling-c-lib-from-c.html
Come posso avvolgere tutte le cose di livello inferiore (C ++ nativo) in C # in modo da poter facilmente comandare quelle funzioni in una lingua con cui mi sento più a mio agio, C #?
Qualsiasi informazione sull'argomento è molto apprezzata.
Soluzione
Penso che P / Invoke sia davvero l'approccio più diretto:
- Crea una DLL in non gestito C ++, contenente tutte le funzionalità necessarie per eseguire l'iniezione.
- Nel tuo codice C #, dichiara alcuni metodi
static extern
e usa l'attributoDllImport
per indicarli alla tua dll C ++. Per maggiori dettagli, consultare il link fornito da arul in la sua risposta .
Nota che P / Invoke non è limitato a " funzioni API di Windows " & # 8212; puoi chiamare funzioni esposte da qualsiasi DLL nativa.
Un potenziale svantaggio di P / Invoke è che dovrai fornire le firme per le tue funzioni C ++, specificando possibilmente un marshalling tutt'altro che ovvio. In tal caso, potresti prendere in considerazione la costruzione di un server COM anziché un "semplice" DLL e utilizzando interoperabilità COM per chiamare il tuo codice da C #.
Altri suggerimenti
Desideri utilizzare P / Invoke, vedi MSDN Magazine .
Se Pinvoking non è quello che vuoi fare, crea un'applicazione C ++ gestita. Utilizzare il C ++ nativo per eseguire l'iniezione di processo. Utilizzare c ++ gestito per creare un'interfaccia .NET compatibile con questo comportamento nativo. Questo può quindi essere chiamato da C #.