Announcement

Collapse
No announcement yet.

Alte C++ Klassen verwenden (kein COM)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Alte C++ Klassen verwenden (kein COM)

    Hallo allerseits,

    ich habe gerade ein kleines Problem und ich hoffe ihr könnt mir weiterhelfen. Meine Aufgabe ist es eine Oberfläche für ein bestehendes Linux/C++ Programm zu schreiben. Meine Frage hierbei, wie kann ich am besten den bestehenden SourceCode unter windows und c# einbinden, ohne alle neu schreiben zu müssen. Es sind keine COM Objekte oder nur Dlls die einzelne Funktionen enthalten die ich mit PInvolke benutzen könnte. Desweiteren beruhen sehr viele Methoden auf STL-Maps oder Vektoren. Wie kann ich diese Klassen mit deren Methoden an eine GUI unter .Net und C# einbinden? Muss ich über MC++ gehen? Dazu noch eine Frage: Ich hatte mal versuch eine Funktion, die ich unter MC++ geschrieben habe unter C# zu benutzen. Die MC++ enthielt als Parameter einen Pointer von Typ int*. Nun hatte ich versucht mit ref int diese Methode anzusprechen. Allerdings meldete der Compiler er könne keine passende Methode finden. Nur über eine UNSAFE Klasse konnte ich die Methode aufrufen, indem ich auch unter c# Pointer benutzte...ich dachte unter .Net macht esd eigentlich keinen unterschied in welcher Sprache etwas geschrieben wurde, solange es unter der CLR läuft?
    Frage über Fragen....
    ich hoffe ihr könnt mir weiterhelfen!

    Cya Ingo

  • #2
    Hallo,

    &gt;ich dachte unter .Net macht es eigentlich keinen unterschied in welcher Sprache etwas geschrieben wurde, <br>
    &gt;solange es unter der CLR läuft?

    das stimmt, aber die Sprache muss sich schon an die Regeln aus der <i>Common Language Specification</i> (CLS) halten und auch das gemeinsame <i>Common Type System</i> (CTS) nutzen. Immer dann, wenn dies nicht der Fall ist, steht unter C# der "Ausweg" über P/Invoke, COM Interop oder unsafe Code zur Verfügung.

    Im Fall der Migration des "alten" C++ Programms ist nicht C# die richtige Wahl, sondern eher <i>Managed C++</i> aus Visual Studio.NET

    Comment


    • #3
      Ja, das hatte ich im Endeffekt auch vor. Ich wollte den alten code eigentlich so belassen wir er ist, da er auch auf der Linux Maschine ständig weiterentwickelt wird. C++ ist aber ehrlich gesagt eine Sprache die mir nicht wirklich zusagt, deswegen C#. Welche Schritte wären denn nötig aus der Linux app ein Com Object zu erstellen? Oder sollte ich lieber einen kleinen MC++ Wrapper schreiben mit dem ich Zugriff auf die alten Klassen habe. Wo gibts Tutorials für solche Wrapper. Ich möchte halt nicht nur Zugriff auf einzelne Funktionen, die in einer Dll stecken, sondern auf Klassen, STL::MAPS usw.. Wie gehe ich das am Besten an? Wie kann ich mit C# darauf zugreifen? Irgendwie muss die Transormation dann in MC++ stattfinden, oder? Ich bin ratlos!!!
      Falls jemand schon irgendwelche Efahrungen gesammelt hat in Bezug auf Migration, immer har damit!

      Danke Ing

      Comment

      Working...
      X