REG_DWORD problem
-
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));