Domanda

E 'possibile chiamare codice C ++, possibilmente compilato come un file di libreria di codice (dll), all'interno di un linguaggio .NET come C #?

In particolare, il codice C ++, come la libreria di rete RakNet.

È stato utile?

Soluzione

Un modo semplice per mettere in C ++ è quello di creare un assembly involucro in C ++ / CLI. In C ++ / CLI è possibile chiamare in codice non gestito come se si stesse scrivendo codice nativo, ma è possibile chiamare in codice C ++ / CLI da C #, come se fosse stato scritto in C #. Il linguaggio è stato fondamentalmente progettato con interoperabilità in librerie esistenti come la sua "killer application".

Per esempio - compilare questo con l'opzione / CLR

#include "NativeType.h"

public ref class ManagedType
{
     NativeType*   NativePtr; 

public:
     ManagedType() : NativePtr(new NativeType()) {}
     ~ManagedType() { delete NativePtr; }

     void ManagedMethod()
      { NativePtr->NativeMethod(); } 
}; 

Poi in C #, aggiungere un riferimento alla vostra assemblea ManagedType, e usarlo in questo modo:

ManagedType mt = new ManagedType();
mt.ManagedMethod();

Scopri questo post blog per un esempio più spiegato.

Altri suggerimenti

Non ho familiarità con la libreria lei ha citato, ma in generale ci sono un paio di modi per farlo:

  • P / Invoke per funzioni di libreria esportate
  • L'aggiunta di un riferimento alla libreria di tipo COM (nel caso in cui hai a che fare con gli oggetti COM).

P / Invoke è una bella tecnologia, e funziona abbastanza bene, tranne che per le questioni nel caricamento del file DLL di destinazione. Abbiamo scoperto che il modo migliore di fare le cose è quello di creare una libreria statica di funzioni native e collegare che in un Managed C ++ di progetto (o C ++ / CLI) che dipende da essa.

Sì, si chiama P / Invoke .

Ecco un ottimo sito di risorse per il suo utilizzo con l'API Win32:

http://www.pinvoke.net/

Certo è. Questo articolo è un buon esempio di qualcosa che si può fare per iniziare su questo.

Lo facciamo da C # sui nostri dispositivi Windows Mobile utilizzando P / Invoke .

La tecnologia utilizzata per fare questo è chiamato P / Invoke ; è possibile cercare articoli sul tema. Si noti che è per la chiamata C da C #, C ++, non così tanto. Così avrete bisogno di avvolgere il codice C ++ in un involucro C che le vostre esportazioni DLL.

Avete considerato Apache Thrift?

http://thrift.apache.org/

Sembra una soluzione molto molto ordinato.

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