2012-04-26 4 views
6

Ich habe eine C++ app, von der ich .NET (C#) Methoden aufrufen möchte. Ich wollte C++/CLI verwenden, aber es wird nur unter Windows unterstützt.Wie rufe ich .NET von C++ in einer plattformunabhängigen Weise wie möglich

Da wir auch den MAC unterstützen, möchte ich .NET von C++ in einer Weise aufrufen, die auf Windows und Mac (mit Mono) funktioniert.

Was ist der beste Weg, dies zu tun?

EDIT: Ich sollte hinzufügen, dass der C# -Code, den wir anrufen möchten, nicht uns gehört. Wir haben keine Möglichkeit, Änderungen daran vorzunehmen. Der C++ - Code gehört natürlich uns.

+0

Große Frage. Ich bin gespannt, was die Leute daraus machen. –

+0

Ich frage mich, unterstützt Mac/Mono DCOM? – wilx

+1

Eine mögliche Lösung besteht darin, RPC mithilfe von [Google Protokollpuffer] (https://developers.google.com/protocol-buffers/) plus Sockets zu emulieren. Der Protokollpuffer hat eine [.NET-Implementierung] (http://code.google.com/p/protobuf-net/). – megabyte1024

Antwort

1

Der einfachste Weg besteht darin, die Funktionalität über einen Funktionszeiger anzuzeigen. Sowohl .NET- als auch systemeigener Code können mit C/C++ - Code in Form eines Funktionszeigers interagieren. Funktionszeiger werden auf allen Plattformen unterstützt, auf denen C++ - Code ausgeführt wird, daher können sie ohne Verständnis von .Net geschrieben werden.

+0

+1: Ich wusste, du würdest überall sein :) –

+0

Danke Kannst du mich auf einige gute Beispiele/Tutorials hinweisen? –

+0

@Andrews Der Begriff für die Suche ist "Reverse PInvoke". Hier sind ein paar Artikel zum Thema http://msdn.microsoft.com/en-us/magazine/cc164193.aspx http://blogs.msdn.com/b/davidnotario/archive/2006/01/13/ 512436.aspx – JaredPar