std::wstring
-
lucio77 schrieb:
Ich will auch keine zweite Variable erstellen, [...]
Tust du in Zeile 17 aber:
std::wstring(servername)=std::wstring(subject_trim);
Das ist äquivalent zu
std::wstring servername = std::wstring(subject_trim);
-
... deswegen habe ich unterschiedliche Varianten versucht.
Zudem habe ich geschrieben,
dass mir der Fehler klar ist,
sich mir aber die Lösung nicht erschliesst.
-
Was willst Du denn nun eigentlich machen?
Das Dein Code (zu recht) Fehler erzeugt ist logisch.
Aber was soll bitte Dein Code?
-
Ich kapier echt nicht wo dein Problem liegt!? Wenn dir der Fehler eh klar ist dann sollte dir doch klar sein dass die Lösung für das Problem einfach ist: Der zweiten Variablen einen andren Namen geben!? Oder ist dein eigentliches Problem wie du diesen _bstr_t in einen std::wstring bekommst!? Dann frag doch bitte danach und sag nicht dass der Fehler eh "trivial" ist, du aber keine Lösung kennst, wer soll da verstehen was du genau wissen willst
Versuchs mal mit
Trim_Dialog(std::wstring(static_cast<wchar_t*>(servername), servername.length()));
Wobei ich ehrlich gesagt das Gefühl hab dass da viel mehr im Argen ist da diese Zeile
servername_.GetWindowText(servername.GetAddress());
ganz und gar nicht gesund ausschaut. Was genau ist servername_ und warum überhaupt der _bstr_t!?
-
Ich wollte nicht 'servername' verwenden,
weil ich die Funktion noch zum Parsen der
anderen Felder des Dialoges benötige.Meine Schwierigkeit ist nicht den Wert von
std::wstring(servername) an 'subject_trim'
zu übergeben sondern den Rückgabewert
aus der Funktion Trim_Dialog() wieder an
std::wstring(servername) zu übergeben.Hm...
-
Das kapier ich nicht, die Funktion liefert doch einen std::wstring als Rückgabewert? Ich hab das Gefühl dir mangelts massiv an Grundlagen. Es wär wohl besser wenn du erstmal richtig C++ lernst bevor du irgendwelchen Code aus dem Internet zusammenkopierst und dann frustriert herumprobierst bis es irgendwie funktioniert. Selbst wenn du es schaffst das so hinzubiegen dass es kompiliert vermute ich, wie in schon meinem letzten Post gesagt, stark dass es abstürzen wird. Dieser _bstr_t bzw. die Art wie du ihn verwendest macht für mich irgendwie absolut keinen Sinn.
-
Das stammt nicht von mir. Ich habe den Code so übernommen
und muß damit leben.servername_.GetWindowText(servername.GetAddress());
-
Von wo hast du diesen Code bitte so übernommen!? Die GetWindowText() Methode schaut aus als würde sie einen Buffer erwarten, für deinen _bstr_t reservierst du aber nirgendwo Speicher und übergibst dann also einen vermutlich uninitialisierten Pointer. Dass die Methode selbst Speicher anlegt kann nicht sein da sie nur einen BSTR* bekommt und damit keine Möglichkeit hat neu allokierten Speicher zu returnen. So jedenfalls kann das hinten und vorne nicht funktionieren und wenn du ein einigermaßen fundiertes Verständnis von C++ hättest wäre dir das auf den ersten Blick klar. Daher nochmal: Lern erst C++, es hat keinen Sinn mit solchen Dingen rumzumachen bevor man noch die Grundlagen verstanden hat, das führt nur zu Frustration.
-
Ich muß den Code eines Russen warten,
den es hier nicht mehr gibt.
(12.000 Zeilen)
Nix Internet.
-
Ok sry, es handelt sich bei servername_ also offenbar um ein CWindow!? Damit kann das schon funktionieren. Du musst dann eben aus dem Rückgabewert einen neuen _bstr_t erzeugen was du eben über den entsprechenden Konstruktor erledigen kannst. Näheres dazu findest du in der MSDN, einfach mal nach _bstr_t googlen. Und beim nächsten Mal schreib bitte von vornherein was du machen willst neben den entsprechend essentiellen Informationen wie z.B. was genau die einzelnen Dinge eigentlich sind und nicht nur einen Codefetzen wo du irgendwas rumprobiert hast mit einem Compilerfehler der absolut nichts mit dem Problem zu tun hat...
-
bis Freitag
-
Was auch immer...
Nachdem ich nochmal drüber nachgedacht und in der Doku geschaut hab bin ich doch noch der Auffassung dass dieser Code mit dieser GetWindowText() Methode so nicht funktionieren kann. Um ehrlich zu sein verstehe ich nichtmal wie das überhaupt kompilieren kann. Aber wenn es dir nur darum geht den wstring wieder in einen _bstr_t zu wandeln dann findest du ja wie gesagt in der MSDN alles weitere.
-
Der Code wurde schon zig-fach kompiliert und
ist auf etlichen PC's im Einsatz.Wie gesagt, ich soll nur die Dialog-Felder
trimmen und bekomme das mit der Übergabe
des Rückgabewertes nicht gebacken.Nicht dass ich sowas nicht schon öfters
gemacht hätte, aber hier für diesen Typ habe
den Dreh noch nicht raus.
-
_bstr_t hat einen Konstruktor der einen const wchar_t* nimmt. An den kannst du einfach dein_wstring.c_str() übergeben und fertig.
-
Ich schau's mir an.
Einen schönen Feiertag.
lucio