Laden...

Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar

Erstellt von partyboy vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.153 Views
P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren
Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar

Hi,

ich wollte die Zahl 4031775092 als Dword in der Registry speichern und habs einfach nicht hinbekommen. Dann lese ich das hier: http://www.pcreview.co.uk/forums/thread-2422811.php

Sehr ärgerlich. Gibts ne Möglichkeit die Zahl trotzdem als dword in die Registry zu kriegen? Muss ich es per API-Call erledigen (hoffentlich gehts damit)?

partyboy

6.862 Beiträge seit 2003
vor 17 Jahren

Naja, die Lösung wird doch schon in dem Thrad genannt. Einfach die Zahl auf die "brutale" Art(per unchecked Block) in die Variable haun, und dann müsste sie auch richtig in der Registry sein soweit ich den Beitrag verstanden hab.

Baka wa shinanakya naoranai.

Mein XING Profil.

P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren

Hi,

leider klappts nicht so einfach. Die Zahl passt nicht in eine int-Variable, es muss uint sein.
uint wird nicht von Microsoft.Win32.RegistryValueKind.DWord unterstützt.

Ich machs über die WinAPI.

partyboy

139 Beiträge seit 2006
vor 17 Jahren

Mach nen Int64, zerleg den in 2 stirngs und für die beiden string wieder zusammen beim eintragen in die registry....?????

Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen

369 Beiträge seit 2006
vor 17 Jahren

.Net verhällt sich schon richtig: System.UInt32 ist nicht CLS-Konform und daher wird ein System.Int32-Wert erwartet. Beides sind 32bit Werte und sie können daher exakt die selben (Bit-)Werte aufnehmen - der Unterschied liegt nur in der Interpretation eben dieser. Ein DWORD ist nichts anders als ein unsigned int, was dem zu Folge auch bedeutet, dass z.B. -1 auch als UInt32.MaxValue interpretiert wird. Die passenden Integer-Werte erhälst du mittels unchecked((int)4031775092) [natürlich mit entsprechendem Wert].

P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren

Original von Kabelsalat
.Net verhällt sich schon richtig: System.UInt32 ist nicht CLS-Konform und daher wird ein System.Int32-Wert erwartet. Beides sind 32bit Werte und sie können daher exakt die selben (Bit-)Werte aufnehmen - der Unterschied liegt nur in der Interpretation eben dieser. Ein DWORD ist nichts anders als ein unsigned int, was dem zu Folge auch bedeutet, dass z.B. -1 auch als UInt32.MaxValue interpretiert wird. Die passenden Integer-Werte erhälst du mittels unchecked((int)4031775092) [natürlich mit entsprechendem Wert].

you rock!! 👍

Besten Dank, funktioniert wunderbar.

369 Beiträge seit 2006
vor 17 Jahren

Stand übrigens auch bereits in dem von dir verlinkten Thread 😉

P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren

Ich weiß, aber ich habs wohl falsch angewendet 🤔

P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren

Hm, ein Problem habe ich noch. Wie bekomme ich den Wert jetzt wieder ausgelesen?

rkRun.GetValue("Wert") liefert mir -263192204 zurück, obowohl 4031775092 im Wert drinsteht.

Danke,
partyboy

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo partyboy,

unchecked Cast bloß andersherum. Warum das die Lösung ist, ergibt sich schon aus Kabelsalats Erklärung:

sie können daher exakt die selben (Bit-)Werte aufnehmen - der Unterschied liegt nur in der Interpretation eben dieser

herbivore

P
partyboy Themenstarter:in
109 Beiträge seit 2005
vor 17 Jahren

Dankeschön, hab nur eine Seite gecastet (geunboxed?). Jetzt kommt auf beiden Seiten -263192204 raus und der Vergleich klappt.

partyboy

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo partyboy,

geunboxed?

nö, hat nichts mit Boxing (oder Unboxing) zu tun.

Boxing und Unboxing (C#-Programmierhandbuch)

herbivore