StrToInt ist kaputt gegangen



  • Hallo,
    habe einen Programmteil der bisher funktionierte. Jetzt habe ich mein Programm mit einem COM Server ausgestattet und nun macht eine Programmzeile Probleme (komplett unabhängig vom neuen Code, ganz andere Stelle).

    AnsiString x;
    ...
    int i = StrToInt(x);
    

    Hier sagt er plötzlich das er einen char* erwartet (für x) statt AnsiString. Also nimmt er die Implementierung für den Befehl "StrToInt" irgendwo anders her. Wie kann ich dem Hund nun beibringen, das er das StrToInt aus "Sysutils" nehmen soll?

    Habe schon probiert direkt vor dem Befehl ein "using namespace Sysutils" einzubauen, brachte aber auch nix.

    Jörn



  • Hallo

    Wenn dann so

    Sysutils::StrToInt(x);
    

    bis bald
    akari



  • oder so:

    x.ToInt();
    bzw.
    x.ToIntDef(int);
    

    grüssle 🙂



  • akari schrieb:

    Hallo

    Wenn dann so

    Sysutils::StrToInt(x);
    

    bis bald
    akari

    Den Gedanken hatte ich auch, aber dann kommt die Meldung "E2316 'StrToIntA' ist keine Element von Sysutils.....

    Das ToInt() geht ist mir bewusst, nur betrifft es viele Stellen im Programm die bei einem Umbau explizit getestet werden müssten. Und das will ich vermeiden. Lieber wäre mir eine Lösung wo es genauso funktioniert wie vorher...



  • Hallo

    Wird von meinem BCB 5 fehlerfrei kompiliert und ausgeführt :

    AnsiString x = "1";
    int y = Sysutils::StrToInt(x);
    

    bis bald
    akari



  • Das ist ja mein Problem. Vor dem Einbau des COM Servers ging es ja auch....



  • Hallo

    Du hast nur geschrieben das du es mit using probiert hast. Die explizite Angabe des namespaces vor jedem StrToInt ist genau das Gegenteil vom using!

    Mir fällt für diesen Compiler-Fehler kein Grund ein. Wird denn wenigstens das angenommen? :

    StrToInt(x.c_str());
    

    Und nur zur Sicherheit : Hast du mal das ganze Projekt neu übersetzten lassen (Menü Projekte/Alle Projekte erzeugen)?

    bis bald
    akari



  • Neu übersetzt ist alle. Die Lösung mit c_str() funktioniert. Allerdings ist so ja nur die Auswirkung beseitigt, nicht die Ursache 😉 Nur Interessehalber....



  • Die Fehlermeldung bzgl. 'StrToIntA' deutet auf eines dieser wunderbaren Makros hin (so wie bei Canvas.DrawTextA(...) !!!)

    #ifdef _UNICODE
      #define StrToInt StrToIntW
    #else
      #define StrToInt StrToIntA
    #endif
    

    Daher mal

    #undef StrToInt
    

    probieren.


Anmelden zum Antworten