.NET-Assembly Verwendung in C++



  • Hallo Leute

    Ich habe eine DLL, bzw genauer gesagt, eine .NET-Assembly.
    Gleichzeitig soll aber das Projekt in C++ programmiert werden.

    1. Das bedeutet, dass ich um C++/CLI nicht drumherum komme. Richtig?

    2. ich hatte ursprünglich gedacht, diese "DLL" ( als ich noch dachte, es wäre eine native DLL ) in eine C++ Serverkonstruktion einzubinden.
    Der Server ist in reinem C++ progammiert, verwendet Bibliotheken ( .lib / .so ).
    Ist es problematisch, reinen C++ Code mit statischen Libraries und diese .NET-Assemblies unter einen Hut zu bringen?

    gruß und danke im voraus

    toby



  • Es ist ganz generell problematisch managed code in unmanage code zu verwenden. Das umgekehrte ist wenig unproblematischer, aber nur wenig.

    Lohnt es sich wirklich C++ zu verwenden (besteht schon Code?)?
    Lohnt es sich wirklich den managed Code für unmanaged Code zugänglich zu machen?

    Ev. wäre ein Weg auch via COM (und dann ein CCW = COM Callable Wrapper zu erzeugen).

    Du erwähnst noch *.so Dateien, daraus schliesse ich, dass das ganze unter Unix oder Linux auch laufen soll.
    Soll da der .NET Code auch verwendet werden? (Falls ja: Wie weit die Interoperabilität unter Mono ??)

    Simon

    Edit
    Zu deinen Fragen:

    1. Das bedeutet, dass ich um C++/CLI nicht drumherum komme. Richtig?

    Via COM wäre auch ein Weg. Also: Nein.

    Ist es problematisch, reinen C++ Code mit statischen Libraries und diese .NET-Assemblies unter einen Hut zu bringen?

    Nein, das ist kein Problem.



  • Nein, Linux ist nicht nötig. Die bisherige Serverbasis ist aber kompatibel.
    Der Server besteht aus reinem C++, ohne Frameworks und sonstiges.

    Und jetzt habe ich folgende Möglichkeiten:

    1. C++/CLI, ich krieg den Server irgendwie zum laufen mit dem C++/CLI.

    2. Ich programmier den Server nochmal neu in C#. Ich nehme mal an, dass eine Socketschnittstelle mit C# machbar ist.

    3. Ich baue eine Wrapper-DLL um die .NET Assembly, die ich ganz normal in mein C++ Projekt einbinden kann.

    Edit2:
    4. Über COM gehts natürlich auch 🙂

    Edit:
    ja es besteht schon C++ Code in Form des Servers, der diese DLL tragen soll.



  • Es ist ganz generell problematisch managed code in unmanaged code zu verwenden.

    Warum? Was bestehen da für Risiken?



  • Die Risiken managed und unmanaged Code zu mischen sind:
    - Zusätzliche Fehlerquellen
    - Oft fehlende Erfahrung in einer der beiden Welten
    - Performance- Einbussen

    Alles in allem handelt man sich Probleme ein, die man ohne die Integration nicht hätte.

    Warum es schwieriger ist aus unmanaged Code managed Code aufzurufen als umgekehrt? Weil grob gesagt .NET die unmanaged Welt "kennt", umgekehrt aber nicht.

    Ist auch bei C++/CLI so mit den Features, die ISO C++ Features sind fast 100% kompatibel zu C++/CLI, C++/CLI aber nicht zu ISO C++. C++/CLI kann als Spracherweiterung zu ISO C++ gesehen werden, wie C++ zu C.

    Natürlich kann man trotzdem die beiden Welten miteinander Verbinden, fragt sich nur ob es Sinn macht und ob der Preis nicht zu hoch ist.

    Simon


Log in to reply