Referenzparameter std::string



  • Hallo zusammen,

    Nachdem ich hier schon eine Weile mitlese, nun mein erster Beitrag.
    Ich habe schon lange nichts mehr in C/C++ gemacht, da ich momentan Projekte mit C# umsetze.

    Nun muss ich jedoch einen Wrapper für eine 3rd Party dll schreiben. Das klappt auch soweit, mein Problem ist nur das ich beim Aufruf der folgend definierten Funktion keine Daten zurück erhalte, obwohl keine Exception geschmissen wird
    und das Ergebnis "true" ist.

    // @parm Zeiger auf den Datenstrom
      // @parm Zeiger auf Fehlertext
      // @parm Zeiger auf die generierten XML-Daten
      // @rdesc true, falls alles ok.
      short 
      Parser
      (
        std::string &strIn,
        std::string &strError,
        std::string &strOut
      );
    

    Und hier mein Aufruf.

    std::string *Eingabe = new std::string("Hier kommt der zu parsende Inhalt rein");
    std::string *Fehler = new std::string();
    std::string *Ausgabe = new std::string();
    
    Parser(*Eingabe, *Fehler , *Ausgabe);
    

    Irgendwie habe ich das Gefühl das die Funktion nicht korrekt auf meine Zeiger zugreifen kann und dort die Rückgabe schreiben kann. Und nun meine Frage, mach ich irgenetwas grundlegendes falsch? Bin jetzt schon eine Weile am probieren, aber irgendwie stehe ich auf dem Schlauch.

    Danke für eure hilfe.

    Grüße Sven



  • Cypirinha schrieb:

    Irgendwie habe ich das Gefühl das die Funktion nicht korrekt auf meine Zeiger zugreifen kann und dort die Rückgabe schreiben kann. Und nun meine Frage, mach ich irgenetwas grundlegendes falsch?

    Falsch direkt nicht, nur etwas umständlich. std::string verwaltet seine Daten ja sowieso dynamisch. Es gibt also keinen Grund, diesen extra noch dynamisch zu erzeugen.

    btw:
    Wenn du schon false oder true zurückgibst, dann solltest du auch bool als Typ verwenden.

    // @parm Zeiger auf den Datenstrom
      // @parm Zeiger auf Fehlertext
      // @parm Zeiger auf die generierten XML-Daten
      // @rdesc true, falls alles ok.
      bool
      Parser
      (
        const std::string &strIn,
        std::string &strError,
        std::string &strOut
      );
    
    std::string Eingabe("Hier kommt der zu parsende Inhalt rein");
    std::string Fehler;
    std::string Ausgabe;
    
    Parser(Eingabe, Fehler , Ausgabe);
    

    Das sollte problemlos funktionieren, ansonsten hast du irgendwo anders einen Fehler.
    In diesem Zusammenhang würde ich dir empfehlen, die Funktion Parser Schritt für Schritt mit dem Debugger mal durchzugehen.



  • Hallo groovemaster,

    danke für die schnelle Antwort.
    Problem ist, ich kann diese Funktion weder mit dem Debugger durchlaufen, noch Änderungen daran vornehmen. Aber ich hab gerade mal beim Hersteller angefragt was ich falsch mache.

    Wenn ich das ganze wie von dir beschrieben nicht dynamisch mache bekommen ich bereits beim Aufruf eine Exception geworfen, bzw. die Anwendung schmiert einfach ab. Irgendwie komme ich mir schon ein wenig bescheuert vor, da es ja ansich nicht so schwer ist 😕

    Grüße

    Sven


Anmelden zum Antworten