2009-08-22 5 views
7

Questa domanda è stata posta prima, ma non ho mai trovato una soluzione veramente soddisfacente -Chiamare C# da C++ nativo, senza/clr o COM?

Ho una libreria di classi scritta in C# e voglio chiamarla da un'applicazione legacy nativa C++. L'applicazione host è veramente nativa, compilata su Windows & Linux, è un'applicazione per console. Quindi, come posso farlo chiamare la libreria di classi C#, assumendo l'uso di Microsoft .NET su Windows e Mono su Linux.

Ho esaminato SWIG e il wrapping con interfacce COM su Windows, ma esiste una soluzione standard riconosciuta che funziona su più piattaforme? vale a dire che è generico, funziona con Microsoft .NET e Mono, una scrittura usa una volta ovunque l'implementazione.

Le soluzioni devono esporre le interfacce di classe complete dal dominio C# al dominio C++.

Domande simili si concentrano solo sugli soluzioni Windows, per esempio -

Call C# methods from C++ without using COM

+0

Dovresti chiedere ai ragazzi mono se, e come, li hanno esportati. –

risposta

5

Se si vuole fare questa piattaforma trasversale, consiglierei di andare con un approccio mono 100%.

Mono ha un pulito Embedding API che funziona su Linux e Windows.

+0

Una buona risposta, incorporare Mono su Windows non è proprio quello che stavo cercando, ma sembra tutto molto manuale. Dovresti scrivere molto codice della piastra di riscaldamento per esporre un'interfaccia completa a una libreria, sembra lunga e fragile, mi ricorda JNI. Mi stavo chiedendo se esiste una sorta di metodo automatico, come SWIG o semplicemente l'esposizione di un'interfaccia COM. – titanae

+0

COM funziona bene, ma non così bene su Linux. SWIG è buono solo per andare dall'altra parte ... Scusa. –