REG_DWORD problem



  • hab die FAQ mehrmals auf dieses problem durchsucht, aber nix gefunden... 😞



  • Alsowenn dir der FAQ-Thread nicht geholfen hat könntest du mal versuchen, die Funktion direkt aufzurufen (also nicht in eine Funktion kapseln) - klappt es dann?



  • schon probiert, klappt aber leider nicht...



  • Also ohne die Rückgabewerte von RegCreateKey und RegSetValueEx zu überprüfen wirst Du da kaum den Fehler finden...

    Des weiteren ist RegCreateKey veraltet (und nur noch wegen der 16-bit Kombatibilität drin), nimm lieber RegCreateKeyEx



  • also:

    momentan arbeite ich noch mit RegCreateKey.
    ich habe versucht, da einfach das "Ex" dranzuhängen, bekam dann aber einen compilerfehler nach dem anderen... ich glaube, die parameter sind bei RegCreateKeyEx etwas anders, und ich hatte schon genug mühe, irgendwas in die registry zu schreiben, bzw. zu kapieren wie ich das anstelle.

    zum problem:

    wenn ich den wert "9" als REG_DWORD eintragen will, bekomme ich zwar einen eintrag, der aber von regedit als "ungültiger wert" angezeigt wird.
    habe also den wert mal direkt in regedit eingetragen.
    in hex ist das dann: "09 00 00 00"...
    wenn ich das jetzt an meine reginsert-funktion weiterleite, bekomme ich aber den hex-wert "15f90"...
    ich denke mal, ich habe einfach nicht kapiert, wie ich einen int-wert in einen DWORD-wert umrechne... (DWORD bedeutet DOUBLE, oder?)

    plz help! 😕



  • sorry, das problem hat sich gelöst...

    einfach ignorieren!

    und big thx für die bisherige hilfe!!! 🙂



  • Nur Schade dass die leute dann nie posten WIE sich das problem dann schlussendlich gelöst hat. Wer das gleiche problem hat und hier sucht, der ist am ende gefrustet weil die lösung des problems 'hat sich erledigt, es funtzt' heißt 😉

    greets,
    andi



  • stimmt leider, den genau jetzt hab ich dieses problem auch, ich benutz übrigens überall die Ex variante sofern möglich, bekomme aber bei im regedit "ungültiger wert" zurück geliefert.

    teil 1, falls der schlüssel vorhanden ist

    if (RegOpenKey(hkey,(LPTSTR) subkey, &hKey) == ERROR_SUCCESS)
    	{
    		DWORD dwError = RegQueryValue(hKey,(LPCTSTR) valuename, (LPTSTR) value,pl_size);
    
    		if (hKey)
    			RegCloseKey(hKey);
    

    teil 2, falls nicht

    RegCreateKeyEx(HKEY_CLASSES_ROOT,(LPTSTR) subkey,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    			if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPTSTR) subkey,0,KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    			{
    				DWORD dwError = RegSetValueEx(hKey,(LPCTSTR) valuename,NULL,typ,(BYTE*) value ,strlen((LPTSTR) value));
    				if (hKey) RegCloseKey(hKey);
    			}
    

    hilfe ist immer willkommen



  • Was für ein Problem hast du? Wie sind deine ganzen anderen Variablen definiert?



  • der prototyp is so definiert:
    WriteRegistry(HKEY hKey, LPVOID subkey, LPVOID valuename, LPVOID value, DWORD typ,int i_hKeyID);

    im aufruf sieht das dann folgender maßen aus:
    test->WriteRegistry(HKEY_LOCAL_MACHINE, "SOFTWARE\\Deutsche Post AG\\test", "test1", "9", REG_DWORD, i_hKeyID);

    es funktionieren alle arten von REG_XY einträgen bis auf REG_DWORD , da liefert er mir (0ungültiger DWORD-Wert) zurück.



  • Du musst als Wert auch einen Pointer auf einen DWORD übergeben:

    DWORD dwNumber=150; 
    RegSetValueEx(hKey,"EintragsName",0,REG_DWORD,(BYTE*)&dwNumber,sizeof(DWORD));
    

    Bei deinem Prototyp sähe das dann so aus:

    DWORD dwNumber = 9;
    test->WriteRegistry(HKEY_LOCAL_MACHINE, "SOFTWARE\\Deutsche Post AG\\test", "test1", &dwNumber, REG_DWORD, i_hKeyID);
    


  • jetzt sagt er mir:

    Konvertierung des Parameters 4 von 'unsigned long *' in 'void *& ' nicht moeglich

    das es nicht funktioniert liegt mit großer wahrscheinlichkeit daran, dass der prototyp weiterhin als LPVOID definiert ist, dies sollte aber nach möglichkeit auch so bleiben, da ich damit mehrere verschiedene arten von REG_XY-typen eintragen können sollte, wenn das so nicht realisierbar ist, muss ich wohl für dword eine extra funktion schreiben 😶



  • Komisch - nach LPVOID sollte er normalerweise ohne Probleme casten. Versuch es mal so:

    (LPVOID)&dwNumber
    


  • D:\RegistryTool\RegToolTester\RegToolTester.cpp(19) : error C2664: 'WriteRegistry' : Konvertierung des Parameters 4 von 'void *' in 'void *& ' nicht moeglich

    grml ich schreib gleich ne extra funktion dafür



  • Warum will der immer void *&, du hast den Funktionsparameter doch als void * bzw. LPVOID deklariert 😕

    Was macht überhaupt deine Klasse und warum hast du nicht einfach die Parametersignatur der WinAPI-Funktion übernommen 🙄



  • so die lösung meiner probleme ist da. hier die lsg, das problem war unter anterem der letzte parameter im aufruf, die länge des inhaltes

    zuerst:

    DWORD dwError = RegSetValueEx(hKey,(LPCTSTR) valuename,NULL,typ,(BYTE*) value ,strlen((LPTSTR) value));
    

    lsg:

    DWORD dwError = RegSetValueEx(hKey,(LPCTSTR) valuename,NULL,typ,(BYTE*) value ,sizeof(DWORD));
    

Anmelden zum Antworten