Autor Beitrag
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.06.04 13:44 
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.

Robert_G hat mir nun in der DP zum einen gesagt, dass meine Idee (s. Link) bei ihm problemlos funktioniert: Direktlink, bzw. er bot auch folgende Alternative: Direktlink.


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:
  • Ich bin zu dumm, fertigen Code via Copy&Paste zu übernehmen -> ;)
  • Es ist ein Bug in D8 Pro
  • Es ist ein Bug in meiner Version von D8 Pro


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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 16.06.04 14:02 
Hallo!

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

ausblenden 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;

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

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


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

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ausblenden 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, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.