Entwickler-Ecke

Andere .NET-Sprachen - Registry und DWORDs


Delete - Mi 16.06.04 13:44
Titel: Registry und DWORDs
Für die, die nicht (so oft) in der DP sind, möchte ich mal einen Direktlink machen, damit ich mir das ganze Bla bla sparen kann. Also: Ich habe ein Problem mit D8 Pro beim Schreiben eines DWORD-Wertes in die Registry. Das soll, laut .NET-Framework, mit "SetValue" möglich sein. Hier das Thema in der DP: klick [http://www.delphipraxis.net/topic24122,0.html].

Robert_G hat mir nun in der DP zum einen gesagt, dass meine Idee (s. Link) bei ihm problemlos funktioniert: Direktlink [http://www.delphipraxis.net/post166390.html#166390], bzw. er bot auch folgende Alternative: Direktlink [http://www.delphipraxis.net/post190007.html#190007].


Wie er schrieb, hat er Delphi 8 Architect (EN), während ich mit D8 Pro (DE) arbeite. Da ich nicht glaube, dass es so einen Unterschied zwischen Pro und Architect gibt, bleiben eigentlich nur folgende Möglichkeiten:


Alle hier anwesenden D8-Besitzer würde ich daher mal um Mithilfe bitten.
Könnt ihr das Problem nachvollziehen?
Oder bin ich der Einzige damit?


Christian S. - Mi 16.06.04 14:02

Hallo!

Folgende Codes werden bei mir mit Delphi 8 Prof. deutsch, Upd2 korrekt ausgeführt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var rk : RegistryKey;
    ui : System.Int32;
begin
  rk := Registry.CurrentUser;
  rk := rk.CreateSubKey('Software\Testschlüssel');

  ui := 123456;

  rk.SetValue('DWORD_Val', ui);

  rk.Free;
end;


Delphi-Quelltext
1:
2:
3:
...
  rk.SetValue('DWORD_Val', Int32(ui));
  ...


Delphi-Quelltext
1:
2:
3:
...
  rk.SetValue('DWORD_Val', Convert.ToInt32(ui));
  ...


Oder habe ich zielstrebig genau die falschen Codes ausprobiert? :D

MfG
Peter


Delete - Mi 16.06.04 15:50

Mensch, das war ein Krampf. Ich weiß jetzt warum es nicht ging. Oder sagen wir: Ich kenne die Ursache. Es gibt standardmäßig (Edit-PS: Na ja, wohl eher nicht? :?) eine nicht dokumentierte Compileroption

Delphi-Quelltext
1:
{$AUTOBOX ON}                    

im Quelltext der Unit. In der Hilfe steht nichts dazu, aber Suche bei Google GOOGLE brachte mich u.a. auf diese Seite [http://chuacw.hn.org/chuacw/archive/2004/05/05/491.aspx], wo folgendes steht:
Zitat:
In the {$AUTOBOX ON} state, a simple type is compatible with that simple type, and TObject itself. Also, in a call to a procedure with an interface type parameter, an object is compatible with only any interface types it implements, provided that the declared procedure is not overloaded.


Na ja, warum auch immer: Aber diese Option hat in meinem Projekt gefehlt. Und wenn sie fehlt, dann erhält man die Fehlermeldung, mit der ich zu kämpfen hatte. Stutzig geworden bin ich nämlich, weil ich ein völlig neues WinForms-Projekt gestartet und deinen Quellcode ausprobiert habe, @Peter. Und der funktionierte auf einmal. :shock:

Damit wäre bewiesen, dass ich a) nicht zu dumm bin, Code per Copy&Paste zu übernehmen, sondern dass ich b) sogar eigenständig denken kann. :mrgreen:

Edit-PS: Als Tipp, ihr solltet mal eure Quelltexte dahin gehend überprüfen. Ich weiß nämlich 100%, dass ich nichts am Unitcode geändert sondern eben nur meine Prozeduren usw. hinzugefügt habe. Womit die Frage offen bleibt, warum besagte Option mal vorhanden ist, und dann wieder nicht. :shock:


AndyB - Do 17.06.04 23:31

AUTOBOX steuert das boxing von Objekten. Wenn es aktiviert ist, geht der Compiler von Delphi 8 genauso vor, wie der C# compiler. Das hat aber den Nachteil, dass das Programm langsamer wird, da boxing eine teure Aktion ist.

Delphi 8 schreibt das {$AUTOBOX ON} bei WinForms Projekten automatisch hin. Bei VCL.NET Projekten jedoch nicht, da es dort eigentlich nicht gebraucht wird.


Delete - Fr 18.06.04 21:25

AndyB hat folgendes geschrieben:
AUTOBOX steuert das boxing von Objekten. Wenn es aktiviert ist, geht der Compiler von Delphi 8 genauso vor, wie der C# compiler. Das hat aber den Nachteil, dass das Programm langsamer wird, da boxing eine teure Aktion ist.

Allerdings hat es den Vorteil, dass dann auch das Registry-Problem (s. oben) nicht mehr existiert. ;)

Zitat:
Delphi 8 schreibt das {$AUTOBOX ON} bei WinForms Projekten automatisch hin.

Definitiv kann ich (wie ich in der DP bereits schrieb) sagen, dass das bei mir nicht der Fall war. Ich habe ein paar gezippte .NET-Projekte auf meiner CD geöffnet und nachgeschaut. Die o.g. Einstellung wird bei mir erst seit Update #2 automatisch ergänzt.