WCHAR in QString wandeln

Alles rund um die Programmierung mit Qt
Antworten
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

WCHAR in QString wandeln

Beitrag 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?
Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QString::fromutf16() sollte da helfen... :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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?
Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

methusalem hat geschrieben: Muss ich hier noch was casten?
Sieht wohl so aus...

QString y = QString::fromUtf16((const unsigned short*)buffer);
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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?
Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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.
Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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.
Martin
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Wchar ist unter Windows eine 16 Bit String. Was für eine Speicherverschwendung. Aber das ist halt MS:(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten