Fehler 234 Beim Lesen eines Wertes aus der Registry
-
zeig doch mal etwas mehr Code, damit man den Fehler in Natura beobachten kann. (meine Kristallkugel hat leider Totalschaden, daher kann ich nicht von hier aus erkennen, was du (falsch) gemacht hast)
-
szLConf = '\0'; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\NORA\\Install Info", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { lRet = RegQueryValueEx(hKey, "PhonixPfad",NULL,&dwRetType,(LPBYTE)szLConf,&dwlength); if(lRet != ERROR_SUCCESS) { FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, lRet, 0, szErr, sizeof(szErr), NULL); lstrcat(szErr, " HKLM localconfig"); AfxMessageBox(szErr); } }Aber lpcbData muss ja nicht initialisiert sein. Ihr wird doch die tatsächliche Größe übergeben.
-
Was genau ist szLConf? Und wie und wo initialisierst du dwlength?
Aber lpcbData muss ja nicht initialisiert sein. Ihr wird doch die tatsächliche Größe übergeben.
Wie kommst du auf den Quatsch? Irgendwie muss die Funktion doch wissen, wie groß der Puffer ist.
-
char szLConf[261];
Ok du hast recht man sollte Sätze zu Ende lesen:)
MSDN: The lpcbData parameter can be NULL only if lpData is NULL.
Ich habe nur bis zum ersten NULL gelesen. Schande über mich.
Leider gibt es hier keinen Smiley wo man sich in Kopf schießen kann.Ich gebe dwLength mal die sizeof(szLConf) mit sollte eher funktionieren.
Aber dann erklär mir mal warum ich diesen Fehler nicht bekomme.
-
CrazyPlaya schrieb:
Aber dann erklär mir mal warum ich diesen Fehler nicht bekomme.
Welchen Fehler? Du übergibst ja nicht NULL, sondern die Adresse einer Variablen, die (vermutlich) den Wert 0 hat.
-
Na den Fehler 234 halt.
Bei mir am Rechner so wie bei einigen unserer Kunden kommt diese Fehlermeldung nicht und alles läuft wunderbar.
Das ich nicht NULL übergebe ist mir schon klar. Bin halt davon ausgegangen, das die lcpbData nur Werte zurückbekommt und deshalb habe ich sie nicht initialisiert.
-
CrazyPlaya schrieb:
Das ich nicht NULL übergebe ist mir schon klar. Bin halt davon ausgegangen, das die lcpbData nur Werte zurückbekommt und deshalb habe ich sie nicht initialisiert.
Das heißt, du initialisierst dwlength gar nicht? Dann hängt es davon ab, was vorher dort im Speicher stand, und damit auch, ob das klappt.
-
Ja stimmt daran kann es liegen.
Habe dwlength jetzt mal mit 512 initialisiert. Das sollte dann wohl reichen.
Besten Dank.
-
CrazyPlaya schrieb:
Habe dwlength jetzt mal mit 512 initialisiert. Das sollte dann wohl reichen.
Das ist schon wieder zu viel des Guten
Der Eingabewert gibt an, wieviel Platz die Funktion in lpData zur Verfügung hat - und wenn du da mehr angibst als tatsächlich vorhanden ist, kann das zu einer Access Violation führen (sehr schmerzhaft). sizeof(szlConf) reicht vermutlich völlig.
-
Wenn ich lpData als NULL übergebe, kann ich laut MSDN lpcbData auch als NULL übergeben. Ist das eine gute Lösung?
-
CrazyPlaya schrieb:
Wenn ich lpData als NULL übergebe, kann ich laut MSDN lpcbData auch als NULL übergeben. Ist das eine gute Lösung?
Kommt drauf an. Ist dir klar, dass der Wert dann nicht mehr ausgelesen wird?
-
Ich mach es einfach mit der sizeof(szLConf) und dann passt es am besten.