/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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;
}



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste