RegQueryValueEx - lpData Problem
-
Hallo, mein Problem ist das tempdata leer bleibt.
Die Bedingung ist jedoch wahr.unsigned char tempdata[255] = ""; QString tmppfad; size = sizeof(tempdata); RegOpenKey(HKEY_LOCAL_MACHINE, (LPCTSTR)"Software\\Microsoft\\VCExpress\\8.0", &hKey); if((RegQueryValueEx(hKey, (LPCTSTR)"Installdir", NULL, NULL, tempdata, &size))) { ui->compilerlist->addItem("Visual C++ 2005 Expess Version"); tmppfad.sprintf("%s",tempdata); ui->compilerlist->addItem(tmppfad); }auch mit
RegQueryValueExAfunktioniert es nicht.
Was mache ich falsch?

-
hKey ist wirklich was? Ist denn der RegOpenKey überhaupt erfolgreich?
Problem kann schon Deine unsinnige Cast-erei sein.
Das muss in die Hose gehen, wenn es sich um ein Unicode Projekt handelt:
RegOpenKey(HKEY_LOCAL_MACHINE, (LPCTSTR)"Software\\Microsoft\\VCExpress\\8.0", &hKey);Richtig:
RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\VCExpress\\8.0"), &hKey);Dito:
unsigned char tempdata[255] = "";Wäre korekt:
TCHAR tempdata[255] = "";
-
Martin Richter schrieb:
hKey ist wirklich was? Ist denn der RegOpenKey überhaupt erfolgreich?
hab es jetzt gedebugged und hkey kriegt folgende Adresse 0x0
also hat es wohl nicht hingehauen....unsigned long size; HKEY hKey;korrekt , oder?!
Martin Richter schrieb:
Richtig:
RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\VCExpress\\8.0"), &hKey);compilerwindos.cpp:68: error: '_T' was not declared in this scopeMartin Richter schrieb:
Wäre korekt:
TCHAR tempdata[255] = "";compilerwindos.cpp:7: error: int-array initialized from non-wide stringMartin Richter schrieb:
Das muss in die Hose gehen, wenn es sich um ein Unicode Projekt handelt:
Eigentlich müsste es garkein Unicode sein...
Sollte ich vllt besser diese Funktionen benutzen?!RegOpenKeyEx , RegQueryValueExZur Information : Die Anwendung wird mit QT Creator 1.3.1 erstellt.
Danke für deine schnelle Antwort

-
Wie kann es sein, dss _T nicht definiert ist aber TCHAR?
_T ist ein define. Oder Du hast _T umdefinir. Dann kannst Du es mit TEXT() probieren.Das Verwenden anderer API Funktionen bringt Dir gar nichts. Setze Dich mal bitte auseinander wie zwisachen Unicode und MBCS unterschiedne wird in einem Projekt und was ein LPTSTR ist

-
Martin Richter schrieb:
Wie kann es sein, dss _T nicht definiert ist aber TCHAR?
_T ist ein define. Oder Du hast _T umdefinir. Dann kannst Du es mit TEXT() probieren.Das Verwenden anderer API Funktionen bringt Dir gar nichts. Setze Dich mal bitte auseinander wie zwisachen Unicode und MBCS unterschiedne wird in einem Projekt und was ein LPTSTR ist

Ich weiss nicht wie das sein kann, aber ich bin hier nicht der Programmierguru^^
allerdings weiss ich schon was Unicode und MBCS ist ...
Jedoch stehe ich auf dem Schlauch.Mit TEXT funktioniert es ... bzw krieg hkey eine richtige Adresse.
Allerdings bleibt tempdata immernoch leer.
-
QString tmppfad; TCHAR tempdata[255]; HKEY hKey; DWORD dwType, dwSize; RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\VCExpress\\8.0"), 0, KEY_READ, &hKey); dwSize = sizeof(tempdata)*sizeof(TCHAR); RegQueryValueEx(hKey, TEXT("Installdir"), NULL, &dwType, (LPBYTE) tempdata, &dwSize); if(tempdata != 0) { ui->compilerlist->addItem("Visual C++ 2005 Expess Version"); tmppfad = QString::fromUtf16( (ushort*)tempdata); ui->compilerlist->addItem(tmppfad); }so gehts. Danke nochmal!
