Autor Beitrag
tmtmtm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 21.11.02 19:47 
Hallo zusammen!

Auch mal wieder da...


Und zwar gibts folgendes Problem:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
LONG RegQueryValueEx(

    HKEY hKey,  // handle of key to query 
    LPTSTR lpValueName,  // address of name of value to query 
    LPDWORD lpReserved,  // reserved 
    LPDWORD lpType,  // address of buffer for value type 
    LPBYTE lpData,  // address of data buffer
    LPDWORD lpcbData   // address of data buffer size 
   );


Ich bekomme diesen Registry-Befehl zum Zeichenketten auslesen nicht hin.
Mein spezielles Problem mit der Geschichte besteht bei "LPBYTE lpData".
Wie soll ich denn von einem Zeiger, der nur auf einzelne BYTE-Elemente zeigen kann, auf einen Buffer (sprich Feld von z.B. 2048 Byte) zeigen lassen? Denn ein Puffer für den Stringwert der Registry sollte doch schon größer als 1 Byte sein. ( :?: )

Aber wie soll ich diesen String mit so einem Zeigertyp in ein ganzes Feld bringen???
Ich bin am Verzweifeln!!! :(

Also Leute, wenn ihr das wisst. :arrow: Raus damit!

Ach so:
Bitte keine TRegistry-Vorschläge. Brauche die API unbedingt.


D a N k E s C h Ö n!!!

MfG Thomas
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 21.11.02 20:39 
Folgende Funktion stammt von NicoDE. Nimm´s als Anregung:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function ReadString(RootKey: HKEY; RegKey, RegVal: string) : string;
var
  SubKey : array [0..80] of char;
  rgHandle : HKEY;
  lpType, cbData : DWORD;
begin
  Result := ''; fillchar(SubKey, sizeof(SubKey), 0);

  lstrcpy(SubKey, pchar(RegKey));

  rgHandle := 0;
  if(RegOpenKeyEx(RootKey,SubKey,0,KEY_QUERY_VALUE,rgHandle) = ERROR_SUCCESS) then
    try
      lpType := REG_NONE;
      cbData := 0;

      if(RegQueryValueEx(rgHandle,pchar(RegVal),nil,@lpType,nil,@cbData) = ERROR_SUCCESS) and
        ((lpType = REG_SZ) or (lpType = REG_EXPAND_SZ)) and
        (cbData > 1) then
      begin
        SetLength(Result, cbData);
        if(RegQueryValueEx(rgHandle,pchar(RegVal),nil,
          nil,@Result[1],@cbData) = ERROR_SUCCESS) then SetLength(Result, cbData - 1)
        else Result := '';
      end;
    finally
      RegCloseKey(rgHandle);
    end;
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 21.11.02 20:45 
Ach du meine Güte, wie kannst du den armen Code von Nico vorsetzen? :shock:

Obwohl, was die Fehlerbehandlung angeht, nimmt es Nico immer sehr genau. Ich wünschte da würde ich auch mal hinkommen. :?
tmtmtm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 21.11.02 20:56 
Titel: Dankeschön...
Danke Leute!

Mal reinfitzeln...

Hätte ja auch fast nix anderes erwartet.
!!!HIGHLY PROFESSIONAL!!! :shock:

Schönen Abend noch! Und grübelt nicht mehr so viel. *g*

THX T.M.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 22.11.02 09:29 
Luckie hat folgendes geschrieben:
Ach du meine Güte, wie kannst du den armen Code von Nico vorsetzen?

Na, so schlimm ist speziell dieser Code ja nun nicht. Das Verständnis kriegt man auch mit dem geringen Wissen hin, das ich besitze.

Zitat:
Obwohl, was die Fehlerbehandlung angeht, nimmt es Nico immer sehr genau.

Ist eigentlich immer empfehlenswert, ob nun mit oder ohne VCL. Du selbst schimpfst ja auch in einigen Beiträgen über den Ressourcenschutz usw.