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

    RegQueryValueExA
    

    funktioniert es nicht.

    Was mache ich falsch? 😕


  • Mod

    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 scope
    

    Martin Richter schrieb:

    Wäre korekt:

    TCHAR tempdata[255] = "";
    
    compilerwindos.cpp:7: error: int-array initialized from non-wide string
    

    Martin 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 , RegQueryValueEx
    

    Zur Information : Die Anwendung wird mit QT Creator 1.3.1 erstellt.

    Danke für deine schnelle Antwort 👍


  • Mod

    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! 😃


Anmelden zum Antworten