wchar_t* nach std::string
-
Hallo Nachdem ich nun meine DLL ohne jegliche Erweiterungen programmieren will, muß ich dementsprechend auch den Code anpassen.
Nun steh ich vor dem Problem einen wchar_t* oder PBYTE in einen std:string zu konvertieren, damit ich später zwei Strings vergleichen kann. Könnt ihr mir da helfen?
Hier mal ein wenig Code
wchar_t* help = (wchar_t *)PropertyValueBuffer; string DeviceIDFromRegistry = (...help...);PropertyValueBuffer ist PBYTE. Geht das vielleicht auch direkt?
C++ macht mich irgendwie alt.

Danke für eure Hilfe.
-
std::stringist eintypedeffürstd::basic_string<char>.
Wenn du wirklichwchar_ts speichern möchtest, solltest dustd::wstring(==std::basic_string<wchar_t>) nehmen.Ansonsten müsstest du Datenverluste in Kauf nehmen. Dazu gabs aber schon einige Threads, da kann dir die Forensuche weiterhelfen.
-
Ah, Danke für den Hinweis. Datenverluste an der Stelle könnten sich fatal auswirken! Die Threads hab ich auch überflogen.. Ich sollte nicht so viel fliegen.

Ich denke wenn ich wstring nehme, dann sollte auch die Konvertierung klappen?!
Ich werds die Tage mal versuchen. Heut abend bau ich auf ner anderen Baustelle weiter.
Danke für die Infos!
Daimonion
-
So, meld mich nochmal mit dem Ergebnis:
wstring DeviceIDFromRegistry = ((wchar_t *)PropertyValueBuffer);funktioniert. Mir ist auch klar warum.
Danke für eure Hilfe.
-
Ich glaube nicht, dass dieser Cast okay ist. Was ist
PBYTE, also der Typ vonPropertyValueBuffergenau? Wahrscheinlich sind die Typen nicht kompatibel und du murkst einfach.Wieder ein Grund, C-Casts zu vermeiden. In C++ wäre wahrscheinlich
reinterpret_castnotwendig...
-
PBYTE ist ein Pointer auf den WinAPI-Typ BYTE - dem name nach irgendwas Richtung (unsigned) char. Ist halt die Frage was drin steht und ob garantiert ist dass der inhalt wchar_t-kompatibel ist (z.B. immer eine gerade Anzahl BYTEs enthält). Das hängt davon ab was die API da reinschreibt.