Frage wie C # von C ++ aufgerufen wird


Ich frage mich, wie man eine c # -Klasse-Methode aus C ++ (Native, nicht C ++ CLI) -Code aufrufen? Brauchen Sie einen einfachen und eleganten Weg


10
2017-11-26 06:24


Ursprung


Antworten:


Verwandeln Sie Ihre C # -Assembly in eine COM-sichtbare Komponente und verwenden Sie COM-Schnittstellen. Das ist der einzige Weg, um es soweit wie ich weiß neben dem selbstgemachten IPC zu machen. Das Problem kommt von der .NET-Umgebung, unter der die .NET-Assembly ausgeführt werden muss und C ++ in seiner nativen C ++ - Umgebung ausgeführt wird.

Die einzige Möglichkeit zur Kommunikation ist entweder ein IPC-Mechanismus (Sockets, ...) oder die Verwendung von COM, da die Prozesse "entkoppelt" werden müssen.

Hier ist ein Tutorial für die COM-basierte Lösung:


9
2017-11-26 06:30



Sie können jede CLR-Assembly (C #, VB.NET, F #, ...) in einem nativen C ++ - Programm einbetten, indem Sie das verwenden, was "CLR-Hosting". So unterstützen native Programme (wie SQL Server) .NET-Codeerweiterungen. SQL CLR in SQL Server.

Sie laden die CLR mithilfe von in einen nativen Prozess CorBindToRuntimeEx() für .NET 2.0 und CLRCreateInstance() in .NET 4.

Details finden Sie auf MSDNoder Jeff Richters Buch CLR über C #.


10
2017-11-26 06:53



Sasha Goldshtein ist der Mann für dieses Zeug:

Es gibt wieder mehrere Möglichkeiten, dies zu tun: 1. Reverse P / Invoke (muss von .NET Delegate als Callback gestartet werden, so ist dies nur gut, wenn die "Aktion" in Ihrem .NET-Code beginnt); 2. COM-Interop (jede .NET-Klasse kann auch ein COM-Objekt mit oder ohne explizite Schnittstellen sein); 3. C ++ / CLI-Wrapper-Klassen. 

Sehen http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

Siehe auch :
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx


9
2017-11-26 06:32



Der einfachste Weg ist die Verwendung von C ++ / CLI. Wenn Sie das nicht in Ihrem Code verwenden können, schreiben Sie eine Wrapper-DLL und rufen Sie diese DLL auf.


-1
2017-11-26 06:55