Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prism Registry und DWORDs (https://www.delphipraxis.net/21047-registry-und-dwords.html)

MathiasSimmack 27. Apr 2004 09:55


Registry und DWORDs
 
Hat jemand schon mal DWORDs und binäre Daten in der Registry gespeichert?
Also, Strings (REG_SZ) und Arrays (REG_MULTI_SZ) sind ja kein Thema:
Delphi-Quellcode:
procedure TWinForm.Button2_Click(sender: System.Object; e: System.EventArgs);
var
  reg : RegistryKey;
  arg : array of string;
begin
  try
    reg := Registry.CurrentUser.CreateSubKey('Software\Testschlüssel');
  except
    reg := nil;
  end;

  if(reg <> nil) then
  begin
    // REG_SZ
    reg.SetValue('RegSZ',string('Hallo, Welt!'));

    // REG_MULTI_SZ
    SetLength(arg,2);
    arg[0] := 'Hallo';
    arg[1] := 'Welt!';
    reg.SetValue('RegMultiSZ',arg);
    SetLength(arg,0);


    reg.Free;
  end;
end;
aber DWORDs?

Auf einer Seite (muss ich mal suchen :oops:) las ich, dass es beim Speichern von sehr großen Integer-Werten einen Bug im .NET-Framework geben soll. Als Workaround wurde das Typecasting als "Int32" empfohlen, was in C# (glaube ich) in etwa so aussah:
Code:
RegistryKey reg = Registry.CurrentUser.CreateSubkey('Software\Testschlüssel');
System.UInt32 ui = 123456;
reg.SetValue('Dword',(Int32)ui);
Is aus´m Kopf geschrieben, weil ich die Seite gerade nicht parat habe. Wie gesagt: Es ging auf der Seite eigentlich um einen Bug, aber zumindest sah ich damit einen Ansatz zum Speichern von DWORDs. Wenn ich allerdings versuche, dieses Prinzip in Delphi umzusetzen
Delphi-Quellcode:
var
  ui : System.UInt32;
begin
  { ... }

    ui := 123456;
    reg.SetValue('RegDword',Int32(ui));

  { ... }
end;
dann erzählt mir der Compiler, es gäbe keine Funktion von "SetValue", die ich so aufrufen könne. :cry:

Wo ist mein Fehler?

Assarbad 27. Apr 2004 10:57

Re: Registry und DWORDs
 
DWORDs sind Integers, Binärdaten muß man sich selber kümmern. Ich hab da auch ein Beispiel für jemanden in SL verfaßt gehabt, ich glaub hier war's drin:

http://assarbad.net/stuff/!export/regval.zip

Wenn nicht, schreib mir mal ne Mail. Resultat können wir ja trotzdem hier veröffentlichen.

MathiasSimmack 27. Apr 2004 12:15

Re: Registry und DWORDs
 
Nee, nee, @Assa. Das hat schon seinen Grund, warum es unter "Delphi .NET" steht. ;)

Ich rede in dem Fall vom Registry-Objekt, das vom .NET-Framework ("Microsoft.Win32"-Namespace) zur Verfügung gestellt wird. In einer WinForms-Anwendung, also nix mit VCL.NET. Nur der Vollständigkeit halber.

Assarbad 27. Apr 2004 12:20

Re: Registry und DWORDs
 
Wenn der Beitrag drüben in der rechten Navibar erscheint guck ich doch nicht auf die Rubrik ;)

Sprichst du eigentlich über die WMI-Klassen oder ist .NET nochmal komplett selbständig implementiert?

Olli

MathiasSimmack 27. Apr 2004 12:42

Re: Registry und DWORDs
 
Du kannst Fragen stellen. :oops: Das Registry-Objekt kommt, wie gesagt, aus dem "Microsoft.Win32"-Namespace und ist Teil des .NET-Framework. Ob dahinter nun noch mal WMI-Anweisungen stecken, das kann ich dir nicht sagen. Tut mir leid, aber so tief bin ich noch nicht in die Materie eingestiegen. ... Hatte ich auch nicht vor ... ;)


Edit:
Zitat:

Wenn der Beitrag drüben in der rechten Navibar erscheint guck ich doch nicht auf die Rubrik
Was aber auch der Beweis ist, dass du meinen Text nur überflogen hast. Da kommen nämlich die Zauberworte drin vor. :mrgreen:

Assarbad 27. Apr 2004 13:12

Re: Registry und DWORDs
 
Stimmt, ich überfliege alles. Und .NET und C# sagen mir immernoch nix ;)

Robert_G 28. Apr 2004 22:44

Re: Registry und DWORDs
 
Mathias, keine Ahnung wo dein Problem ist:
Alle drei würden funktionieren...
Delphi-Quellcode:
  reg.SetValue('DWORD_Val', Convert.ToInt32(ui));
  reg.SetValue('DWORD_Val', Int32(ui));
  reg.SetValue('DWORD_Val', ui);
Das ganze funktioniert auch ohne Umwege mit jedem Variablentyp, der mit Integer kompatibel ist (gerade getestet!)

Mit den UIntXX-Typen muss man in D8 vorsichtig umgehen, ich habe damit schon einige komische Dinge erlebt, die mit einem Integer oder IntXX nicht auftraten.

Edit: aus "Matthias" wurde "Mathias" :mrgreen:

MathiasSimmack 29. Apr 2004 06:00

Re: Registry und DWORDs
 
Das Problem ist, dass bei mir keine der 3 Anweisungen funktioniert. Und da ich abgesehen von dieser hier
Delphi-Quellcode:
reg.SetValue('DWORD_Val', Convert.ToInt32(ui));
selbst alle schon ausprobiert habe, schiebe ich´s jetzt einfach mal auf das noch fehlende Update #2 für Delphi 8.

Robert_G 29. Apr 2004 07:43

Re: Registry und DWORDs
 
Moin...
Das klingt nach einem verdammt guten Argument sein D8 auf den neuesten Stand zu bringen. :mrgreen:

Assarbad 29. Apr 2004 08:35

Re: Registry und DWORDs
 
@Mathias: Dann mußte morgen mal mitkommen nach CB. Da kannste es dir dann selber saugen ;)

Olli


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz