C++/CLI integer mit std int mischen? Logging Klasse



  • Hey Leute, habe ein kleines Problem.

    Ich habe hier eine klassische C++ Klasse, nicht managed, aber mit /CLR kompilierbar. Dann habe ich eine Form mit einer Textbox, die ich als Ausgabe für eine Loggingklasse benutzen möchte.

    Jetzt stellt sich die Frage, ob ich die Loggingklasse in managed oder unmanaged C schreibe. Denn irgendwo muss ich ja definitiv casten. In welcher Richtung ist es einfacher?

    Ich habe mal versucht die Loggingklasse managed zu lassen und etwa so etwas geschrieben:

    #include <cliext/vector>
    
    ref class log
    {
      public:
      vector<String^>^ sLog = gcnew vector<String^>;
    
      log(int value)
      {
      sLog->push_back((String^)value);
      }
    
      ~log();
    
      ...
    };
    

    Okay dieser Cast funktioniert nicht, schätze man darf das nicht so machen.

    Dazu kommt, dass wenn ich log aus einer unmanaged Klasse aufrufe und einen Integer übergebe, Wird kein passender Konstruktor gefunden. Daher vermute ich, dass "klassische" int und die cli/c++ int (die ja soweit ich weiß einen alias haben auf System::Int32) unterschiedliche Datentypen sind. Wie kann ich das denn (angenommen die eigentliche log Klasse funktioniert..) lösen?

    Danke fürs Lesen, wenn was nicht klar ist bitte schreiben, werde versuchen mich anders auszudrücken.



  • Ich würds so entscheiden:
    Wenn die Logging Klasse in nativen (und managed) Context benötigt wird, dann schreibe sie in native C++. Wenn sie nur in managed Code verwendet wird (was bei Dir nicht der Fall ist, wenn ich das richtig verstanden habe) würde ich sie in puren C++/CLI bzw. .NET schreiben (dazu gehört auch NICHT den vecor aus cliext/verctor verwenden - besser System::Collections::Generic::List<..>).

    Also: Logging Klasse in native C++.

    BTW: http://www.c-plusplus.net/forum/263084



  • Alles klar, herzlichen Dank, werde ich so umsetzen.

    Ja, den verlinkten Thread kenne ich, wir warten sehnsüchtig auf unsere Lizenzen, daher eher die Übergangslösung jetzt.

    Danke für den Tip bzgl. cliext vector.

    Mfg,
    jakap


Anmelden zum Antworten