C#-Dll für Nicht-DotNet-Sprachen



  • Hallo Gemeinde,

    C# kompiliert ja nicht in Assembler-Code, sondern in eine Art Bytecode, die der Interpreter umsetzt.

    Funktioniert es also überhaupt, dass ich eine C#-DLL z.b. in C oder C++ nutzen kann?



  • DarthZiu schrieb:

    Funktioniert es also überhaupt, dass ich eine C#-DLL z.b. in C oder C++ nutzen kann?

    Nur mit leichten Verrenkungen (COM oder C++/CLI-Wrapper). Die Frage war aber in der letzten Zeit schon sehr häufig in der ein oder anderen Form.

    Beispielsweise hier (Den Ausführlicheren Thread der zeitlich nur wenige Tage zuvor war, finde ich auf Anhieb leider nicht).



  • Sofern die C#-Dll als COM definiert wurde, kannst du auch von C bzw. C++ darauf zugreifen (bequem ist das jedoch nicht -):

    [ComVisible(true)]
    


  • Okay. Gibt's da irgendwo ein Tut oder Beispiele, wie man das mit dem COM oder C++/CLI-Wrappern macht? Würde mir das gern anschauen, bevor ich eine Entscheidung treffe.

    Noch ne Frage dazu: Wenn ich das so mache, wie ihr schreibt, dann muss trotzdem .NET auf dem System installiert sein, weil der DLL-Code dann immer noch in CLI ist?



  • DarthZiu schrieb:

    Noch ne Frage dazu: Wenn ich das so mache, wie ihr schreibt, dann muss trotzdem .NET auf dem System installiert sein, weil der DLL-Code dann immer noch in CLI ist?

    Logischerweise ja. Nur weil du den Aufruf in einer anderen Sprache machst, gelten ja nicht andere Abhängigkeiten.

    DarthZiu schrieb:

    Okay. Gibt's da irgendwo ein Tut oder Beispiele, wie man das mit dem COM oder C++/CLI-Wrappern macht? Würde mir das gern anschauen, bevor ich eine Entscheidung treffe.

    Zu COM sollte einiges existieren (und ich kann dir sagen: mit C++ fand ich COM immer schrecklich), und zu C++/CLI ist es eigentlich ganz einfach gesagt (aber mühsam umzusetzen): Verpasse der C++/CLI-Wrapper DLL ein C-Kompatibles Interface (Sprich: Keine Klassen, nur Datentypen die in C erlaubt sind...), und steuere innerhalb dieser dll die C#-Dll an. C++/CLI ist eine Sprache die ins besondere für die Schnittstelle zwischen der managed und nativen Softwarewelt geeignet ist, da sie beides versteht.


Log in to reply