2009-10-28 6 views
5

Wie rufe ich einen .NET-Code aus nativem C++ (unmanaged code) auf? Ich möchte .NET-Code für meine nicht verwaltete Anwendung (C++) verfügbar machen und sie dann verwenden. Genauer gesagt möchte ich C# von nativem C++ aus aufrufen :). Ich weiß, es gibt viele Wege, aber können Sie mir die Vor- und Nachteile von jedem sagen? Übrigens, ich möchte COM nicht verwenden, also was sind die Optionen jetzt?Wie verwalteter Code aus nicht verwaltetem Code verwendet wird?

Ist es möglich, dass ich den C# -Code in C++/CLI verpacken und dann von C++ aus aufrufen? Wenn ja, wie mache ich das? Wie verpacke ich das C# in C++/CLI und rufe es dann von C++ aus?

+0

mögliches Duplikat von [Exportieren von DLL-Funktionen in nicht verwaltete Programme] (http://stackoverflow.com/questions/12647766/exporting-dll-functions-to-unmanaged-programs) – Rohit

Antwort

0

Sie könnten expose die verwaltete Komponente als COM-Objekt.

5

Ich habe gerade vor kurzem darüber geschrieben. Es ging um Delphi, aber das bedeutet nicht, dass es nicht auch mit C++ funktionieren wird.

.NET component in DELPHI 2009

Auch ohne viel über C zu wissen ++, ich weiß noch, dass IUnknown und COM-kompatible Schnittstelle Referenzen verwendbar sein sollten gut von C++ (im Fall, dass Sie Objekte passieren, nicht nur Strukturen).

  • Sie können C++/CLI von Microsoft verwenden, um auf Ihren C# -Code zu verweisen und ihn als normale DLL-Funktionen zu exportieren.
  • Sie können auch eine MSBuild task Ich schrieb, dass Sie die Funktion direkt aus C# exportieren können. Analog zur Verwendung von DllImportAttribute.
  • Dieser C# -Code würde eine Funktion "YourExportName" exportieren, die genau wie jede andere C-kompatible Funktion verwendet werden kann.


    class Sample 
    { 
        [DllExport("YourExportName")] 
        static int TestFunction(int left, int right) 
        { 
        return left + right; 
        } 
    } 
    
    1

    Sie können Mono immer einbetten. Ich habe es bisher in zwei Projekten selbst gemacht und es ist einfach genug. Folgen Sie Embedding Mono für weitere Informationen.