Problem mit Rückgabewert "string_val"



  • Ich würde empfehle TCHAR nicht zu verwenden. Auf Support für pre-NT Windosen kann man glaube ich heutzutage so-gut-wie überall verzichten. Und wer es nicht kann, weiss normalerweise genau dass und warum er es nicht kann.



  • Martin Richter schrieb:

    Und wenn Deine Frage abzielt, wie etwas, dass größer ist als ein Register zurück gegeben werden kann:
    Der Aufrufer stellt den Stack Bereich zur Verfügung, in den der Rückgabewert passen soll, diese Adresse wird übergeben, die Funktion füllt diesen.

    Aber meine Zeiten aus dem Compilerbau sind lange her... das erklärt ein anderer evtl. besser.

    Das ist eine recht übliche Variante. Bei amd64 werden aber üblicherweise kleine Objekte in mehreren Registern zurückgegeben (max. 2 Register). Geht aber natürlich nur wenn sie trivial kopier- und zerstörbar sind.
    Bei grösseren bzw. nicht-trivial dann so wie du geschrieben hast.

    https://godbolt.org/g/XnhbDA

    Andere Implementierung ist mir keine bekannt. Bin aber auch kein Compilerbauer 🙂


  • Mod

    hustbaer schrieb:

    Ich würde empfehle TCHAR nicht zu verwenden. Auf Support für pre-NT Windosen kann man glaube ich heutzutage so-gut-wie überall verzichten. Und wer es nicht kann, weiss normalerweise genau dass und warum er es nicht kann.

    Also ich nutze es immer noch gerne für meinen Standardcode

    Der Grund ist einfach: Wie oft bekomme ich irgendeinen Code, der nur char* kann und mag. Dennoch will ich ohne Umwege oder Komplexität das Tool nutzen. TCHAR erlaubt mir jederzeit auch meinen aktuellen Code schnell mal an "altes" anzupassen. Und Mehraufwand ist es nicht.

    Ansonsten schreibe ich nur noch für Vista und und ab November für Windows 7 und später... also gäbe "Support-Technisch" für mich auch keinen Grund.

    Wenn ich mich komplett umstellen würde, dann würde ich alle auch Funktionen nur noch mit W Extension verwenden...

    Es wirkt für mich komisch GetWindowText zu schreiben und Unicode voraus zu setzen. Aber vermutlich nur einfach ungewohnt.



  • Martin Richter schrieb:

    hustbaer schrieb:

    Ich würde empfehle TCHAR nicht zu verwenden. Auf Support für pre-NT Windosen kann man glaube ich heutzutage so-gut-wie überall verzichten. Und wer es nicht kann, weiss normalerweise genau dass und warum er es nicht kann.

    Also ich nutze es immer noch gerne für meinen Standardcode

    Der Grund ist einfach: Wie oft bekomme ich irgendeinen Code, der nur char* kann und mag. Dennoch will ich ohne Umwege oder Komplexität das Tool nutzen. TCHAR erlaubt mir jederzeit auch meinen aktuellen Code schnell mal an "altes" anzupassen. Und Mehraufwand ist es nicht.

    Du bist ein alter Hase und weisst wie man den Code schreiben muss damit es dann auch wirklich funktioniert wenn man später mal eine MBCS Version bauen will. Wenn Leute für die das TCHAR Thema neu ist Code schreiben, kommt dabei niemals im Leben 'was raus was dann auch wirklich baut geschweige denn fehlerfrei läuft wenn man auf MBCS umstellt. Dann lieber gleich alles mit wchar_t.

    Martin Richter schrieb:

    Ansonsten schreibe ich nur noch für Vista und und ab November für Windows 7 und später... also gäbe "Support-Technisch" für mich auch keinen Grund.

    Wenn ich mich komplett umstellen würde, dann würde ich alle auch Funktionen nur noch mit W Extension verwenden...

    Es wirkt für mich komisch GetWindowText zu schreiben und Unicode voraus zu setzen. Aber vermutlich nur einfach ungewohnt.

    Ja, genau. Also zumindest ich mache es so. Also überall direkt die W Versionen aufrufen und die _W structs verwenden etc. Im Prinzip alles was von der Projekteinstellung UNICODE vs. MBCS abhängig ist verwende ich nicht, sondern direkt die "W" Varianten. Es sei denn ich übersehe wieder mal was.


Anmelden zum Antworten