Seite 1 von 1
WCHAR in QString wandeln
Verfasst: 13. Januar 2006 15:05
von methusalem
Ich glaubs einfach nicht ... irgendwie seh ich den Wald vor lauter Bäumen nicht.
Ich hab ne externe dll, die ich einbinde. In der Header Datei dazu gibts ne Methode, die einen WCHAR speichert. Das Ergebnis möchte ich nun gerne in einen QString hineinschubsen. Ich kriegs aber einfach nicht hin.
Hier mal eine (stark vereinfachte) Funktion bei der das genutzt wird.
Code: Alles auswählen
void getSerialNumber(IO_HANDLE handle)
{
WCHAR buffer[9];
IowGetSerial(handle, buffer);
// hier nun buffer in QString wandeln ...
}
Ich hab jetzt schon den Versuch gemacht, die chars des Arrays auszulesen und in ein QChar zu speichern. Nun könnte man das in einer Schleife machen und diese QChar dann per append() an den QString anhängen. Aber geht das nicht einfacher?
Verfasst: 13. Januar 2006 15:21
von Christian81
QString::fromutf16() sollte da helfen...

Verfasst: 13. Januar 2006 16:00
von methusalem
Damit hatte ich gestern auch schon gespielt! Aber ich bekomme das nicht hin.
Irgendwie hab ich immer wieder Probleme mit Typumwandlungen. Ich muss mich damit dringend noch mal beschäftigen.
Ich bekomme nun folgenden Fehler beim Compilieren:
Code: Alles auswählen
iow.cpp:9: error: invalid conversion from `WCHAR*' to `const ushort*'
iow.cpp:9: error: initializing argument 1 of `static QString QString::fromUtf16(const ushort*, int)'
Die Zeilen sehen so aus:
Code: Alles auswählen
WCHAR buffer[9];
...
QString y = QString::fromUtf16(buffer);
Muss ich hier noch was casten?
Verfasst: 13. Januar 2006 16:09
von Christian81
methusalem hat geschrieben:
Muss ich hier noch was casten?
Sieht wohl so aus...
QString y = QString::fromUtf16((const unsigned short*)buffer);
Verfasst: 13. Januar 2006 16:45
von methusalem
Moin,
vielen Dank für die Hilfe. Das wars ... ich hab die Sache im QString

. Ich gelobe Besserung und werde mich mit dem Thema nochmal auseinandersetzen ...
Nun werd ich noch mal OT: Kann mir mal jemand verraten, warum es so typdefs wie WCHAR, ULONG, BOOLEAN gibt, wo es doch diese Datentypen auch ganz normal in c++ gibt?
Sind das C Altlasten?
Macht es einen Sinn, diese so zu benutzen?
Wo finde ich mehr über diese typdefs?
Verfasst: 13. Januar 2006 17:10
von Christian81
Das sind windows-spezifische Datentypen und sollten deshalb nicht verwendet werden. Sie sind irgendwo in den SDK-Headern von Windows versteckt. Eventuell erfährst du auch was auf msdn.microsoft.com.
Verfasst: 13. Januar 2006 21:03
von methusalem
Christian81 hat geschrieben:Das sind windows-spezifische Datentypen und sollten deshalb nicht verwendet werden. Sie sind irgendwo in den SDK-Headern von Windows versteckt. Eventuell erfährst du auch was auf msdn.microsoft.com.
Hmm, nun muss ich doch noch mal nachhaken! Bist du dir sicher, das dies windowsspezifische Datentypen sind? Ich hab hier ein SDK für eine USB Hardware vor mir liegen (
http://www.codemercs.com/IOWdownloadsD.html), und da sind Beispielsourcen für Linux dabei in denen genau diese Datentypen auch benutzt werden. Ich bin verwirrt!
Ich war bisher davon ausgegangen, das diese typdefs mit entsprechenden #ifdef Anweisungen für die eine Platform so und für die nächste eben so definiert werden.
Verfasst: 13. Januar 2006 21:38
von Christian81
Natürlich kann sie auch jeder andere benutzen - nur eigentlich kommen sie meines Erachtens aber von M$ und werden auch nur dort intensiv benutzt.
Verfasst: 13. Januar 2006 21:43
von methusalem
OK, Danke noch mal für die nette Unterstützung. Mit der letzten Frage werde ich mich dann wohl mal bei denen im Forum umtun.
Verfasst: 13. Januar 2006 22:58
von BartSimpson
Wchar ist unter Windows eine 16 Bit String. Was für eine Speicherverschwendung. Aber das ist halt MS:(
Verfasst: 13. Januar 2006 23:29
von Christian81
BartSimpson hat geschrieben:Wchar ist unter Windows eine 16 Bit String. Was für eine Speicherverschwendung. Aber das ist halt MS:(
Erst überlegen, dann schreiben!
tztz