823 Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo,

Habe mir gerade diesen code Schnippel zum auslesen von werten aus der registry zusammen gestückelt:


unsigned char szDataBuf[128]; //(1)
HKEY hkey; //(2)
DWORD dwSize = 128; //(3)


RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion", 0, KEY_READ, &hkey);

RegQueryValueExA(hkey, "ProductId", NULL, NULL, szDataBuf, &dwSize);


Dazu hätte ich ein paar fragen:
(1) - warum kann ich hier nicht eine string Type variable verwenden?
(2) - was genau ist das?Da sollte doch eigentlich "HKEY_LOCAL_MACHINE" stehen, oder?
(3) - warum kann das nicht NULL sein, wenn mich die Größe nicht interessiert?
(4) warum brauche ich das "&" vor den beiden letzten Argumenten?

Hoffe ihr könnt mir helfen, :)

cplspls

1 Antwort

0 Punkte
Beantwortet von Experte (3.2k Punkte)
1. die Funktion verlangt halt ein LPBYTE, also einen Zeiger auf ein BYTE-array. ein unsigned char entspricht halt einem byte, string ist der funktion zu komplex. außerdem muss es ja garkein string-wert in der registry sein.

2. Da legste einfach nur ne HKEY variable mit namen hkey an. hierin wird ein Handle zum Schlüssel gespeichert. Is praktisch so ähnlich wie ein HWND, nur dass man kein Fenster sondern einen Reg-Schlüssel hat. HKEY_LOCAL_MACHINE kannst du es nicht nennen, da dies bereits eine Konstante ist. hkey_local_machine dürfte aber funktionieren. die Namen sind dem Compiler ja recht egal, solange sie alle in den standart passen. da entscheidet dann der geschmack und das ordnungsverhalten des programmierers^^

3. Dieses Argument hat zwei aufgaben. erstens legt es fest, wie groß das szDataBuf-array ist, damit die funktion nicht übers ende hinausschreiben kann und somit pufferüberläufe verursacht. zweitens wird die menge an gelesenen bytes reingeschrieben. Außerdem kann ich mir keinen Fall vorstellen, wo man die Größe nicht braucht.^^

4. Nochmal das Kapitel "Zeiger und Referenzen" in nem beliebigen C++-Tutorial anschauen ;) Mit dem & wird die Adresse der Variable übergeben. über diese Adresse kann in der Funktion die Variable manipuliert werden und nicht blos ne lokale Kopie.

Ele
...