|
| Forkert aflæsning af registrerings databas~ Fra : Jens Rauff |
Dato : 29-09-02 08:42 |
|
Jeg har et problem med at læse fra registreringsdatabasen. Ligemeget hvad
værdien af subkey'en er, får jeg min variabel tilskrevet 0. Data i
registreringsdatabasen er gemt som DWORD. Kan I se nogle fejl som jeg ikke
kan?
Min kode:
HKEY hKey; //handle to registry key
DWORD RegistryValue; //value of subkey
DWORD RegistryValueSize = 8; //size of subkey value in bytes
//retrive handle to registry key
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\MyProg", 0, KEY_QUERY_VALUE,
&hKey);
//retrive value of registry key
RegQueryValueEx(hKey, "SubKeyVal", 0, 0, (LPBYTE) RegistryValue,
&RegistryValueSize);
RegCloseKey(hKey); //close handle for registry key
Når jeg herefter vil bruge RegistryValue i en if sætning er det altid den if
hvor RegistryValue skal være nul. Jeg har taget koden fra et eksempel, da
jeg ikke tidligere har rodet med registreringsdatabasen.
Håber at I kan hjælpe mig.
| |
Thomas Lykkeberg (29-09-2002)
| Kommentar Fra : Thomas Lykkeberg |
Dato : 29-09-02 11:11 |
|
On Sun, 29 Sep 2002 09:42:12 +0200, "Jens Rauff"
<e01jensra@student.hih.dk> wrote:
>Jeg har et problem med at læse fra registreringsdatabasen. Ligemeget hvad
>værdien af subkey'en er, får jeg min variabel tilskrevet 0. Data i
>registreringsdatabasen er gemt som DWORD. Kan I se nogle fejl som jeg ikke
>kan?
>
>DWORD RegistryValue; //value of subkey
>DWORD RegistryValueSize = 8; //size of subkey value in bytes
>
>//retrive value of registry key
>RegQueryValueEx(hKey, "SubKeyVal", 0, 0, (LPBYTE) RegistryValue,
>&RegistryValueSize);
Du mangler vist lige et '&' tegn foran RegisterValue i dit kald til
RegQueryValueEx()
/Thomas
| |
Thomas Lykkeberg (29-09-2002)
| Kommentar Fra : Thomas Lykkeberg |
Dato : 29-09-02 11:17 |
|
On Sun, 29 Sep 2002 12:10:43 +0200, Thomas Lykkeberg
<thomasDOTlykkeberg@privatDOTdk> wrote:
>Du mangler vist lige et '&' tegn foran RegisterValue i dit kald til
>RegQueryValueEx()
Lige en til til: Du skal lave et array DWORD RegisterValue[2] så
behøver du heller ikke '&' tegnet.. Du beder jo om 8 bytes, defor
2 stk. DWORD's (2 x 4 byte) hvis DWORD er en 32bit størrelse.
Jeg synes lige du skulle tage et kig på MSDN igen omkring brugen af
denne funktion. Du skal huske at det er dig som skal allokerer en
buffer (lpData) af samme størrelse som du beder om at få læst tilbage
fra Reg databasen.
/Thomas
| |
Morten F. Hansen (29-09-2002)
| Kommentar Fra : Morten F. Hansen |
Dato : 29-09-02 11:13 |
|
> Jeg har et problem med at læse fra registreringsdatabasen. Ligemeget hvad
> værdien af subkey'en er, får jeg min variabel tilskrevet 0. Data i
> registreringsdatabasen er gemt som DWORD. Kan I se nogle fejl som jeg ikke
> kan?
[cut]
Kan ikke umiddelbart se nogle fejl i den kode du bruger, udover at du ikke tester om dine funktionskald går godt eller skidt. Man
skal ALTID ALTID ALTID teste om en funktion fejler eller går godt, og handle derefter. Noget i denne retning er langt bedre:
#include <windows.h>
static LONG RegReadWordKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPDWORD lpValue)
{
HKEY hSubKey;
LONG ReturnCode;
ReturnCode = RegOpenKeyEx(hKey, lpSubKey, 0, KEY_QUERY_VALUE, &hSubKey);
if (ReturnCode != ERROR_SUCCESS)
return ReturnCode;
DWORD dwKeySize = sizeof(DWORD);
ReturnCode = RegQueryValueEx(hSubKey, lpValueName, NULL, NULL, (LPBYTE)lpValue, &dwKeySize);
if (ReturnCode != ERROR_SUCCESS)
{
RegCloseKey(hSubKey);
return ReturnCode;
}
RegCloseKey(hSubKey);
return ERROR_SUCCESS;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DWORD dwKeyVal;
LONG ReturnCode = RegReadWordKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\MyProg", "SubKeyVal", &dwKeyVal);
if (ReturnCode != ERROR_SUCCESS)
{
LPSTR MessageBuffer;
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, ReturnCode, 0, (LPSTR)&MessageBuffer, 0,
NULL) != 0)
MessageBox(NULL, MessageBuffer, "Error reading registry key", MB_OK | MB_ICONSTOP);
else
{
MessageBox(NULL, "Both RegReadWordKey() and FormatMessage() failed...", "Error", MB_OK | MB_ICONSTOP);
LocalFree(MessageBuffer);
}
return 0;
}
// ...
return 0;
}
| |
|
|