PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Rückgabewert aus der Registry



Andy1988
23-03-2005, 21:04
Nabend ;)

Ich schreib grade in C# ein kleines Prog und stehe nun vor einem Problem. Ich lese einen Integer Wert aus der Registry aus. Nur lässt sich dieser irgendwie nicht vernünftig von einem object in einen int umwandeln! Er wirft mit immer eine InvalidCastException! Nur weiß ich nicht warum :D

Die Methode sieht so aus:

private int getdefaultsoll()
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software\\Stundenabrechnung");
if(rk == null)
{
MessageBox.Show("Der Registry Schlüssel fehlt. Es wird ein neuer erzeugt.", "Registry Schlüssel", MessageBoxButtons.OK, MessageBoxIcon.Information);
rk = Registry.CurrentUser.CreateSubKey("Software\\Stundenabrechnung");
rk.SetValue("defaultsoll", 8);
}

int rueckgabe = (int)rk.GetValue("defaultsoll", 8);
//MessageBox.Show(rueckgabe.ToString());
return rueckgabe;
}

Der Fehler liegt in der Zeile hier:
int rueckgabe = (int)rk.GetValue("defaultsoll", 8);

Wenn ich den default Wert zurückgeben lassen, den Wert aus der Registry also komplett lösche, läuft der Kram. Nur aus der Registry mag er wohl nicht!

edit:
Hab grad mal probiert, anstatt einer Zeichenfolge in der Registry einen DWORD Wert zu nehmen. Damit gehts, allerdings erstellt er, wenn der Schlüssel noch nich existiert (und somit auch nicht der Wert defaultsoll) wieder eine Zeichenfolge! Und für setValue() gibt es keinerlei Überladungen, mit denen ich als zusätzlichen Parameter einen Typen festlegen könnte! Ich kann also nicht festlegen, was für ein Typ der Wert sein soll!
Jemand ne Idee?

edit2:
problem gelöst!
Das Framework ist so intelligent und rafft automatisch, welcher Typ das ist und hat schon nen DWORD Wert erzeugt, wenn keiner da war. Was ich aber nicht kapier is, wie da ne Zeichenfolge rein kam! Ich hab die nämlich nich gesetzt *g*

7.e.Q
11-05-2005, 12:35
Äh ich glaub, damit wärest du hier eh im falschen Forum gewesen. Hier sind hauptsächlich Linux Entwickler (oder?)... aber wir sind ja dennoch gern bereit, uns mit derartigen Problemen zu beschäftigen. Eventuell lernt man dabei ja noch was. :)

Boron
11-05-2005, 12:54
Ich kenne mich mit C# jetzt nicht aus, aber wenn es Java nur annähernd so ähnlich ist wie man sagt, dann kann das logischerweise nicht funktionieren.

Hier ist die API-Dokumentation zu dieser Funktion:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfmicrosoftwin32registrykeyclassgetvaluetopic2. asp

Da steht, dass die GetValue() ein Objekt von Typ object zurückliefert.
Und das willst du in einen einfachen Datentyp int umwandeln?
Wie soll das gehen?

[edit]
:mad: Mist, warum antworte ich auf einen Beitrag, der Bereits im März vom Threadersteller selbst gelöst wurde :mad:?

klewan
11-05-2005, 12:59
:D zurück in die zukunft teil4

7.e.Q
11-05-2005, 13:11
lol... mir gings auch nicht anders. Aber ich hab meine Gründe. Welche is ja egal.

Andy1988
11-05-2005, 14:14
Danke für die rechtzeitigen antworten *muhaha* :D :rolleyes:

Naja, Problem war, dass ich nen Wert ausm Textfeld geholt hab, der ein Integer sein sollte. Ein Textfeld gibt aber nur Strings zurück. Den musste ich noch mit Int32.Parse(text) in nen Int umwandeln.

Aber C# is eh nich so mein Ding! Mich nervt das WIndows und das nötige Framework. Bin nur beruflich dran gebunden -.-

7.e.Q
13-05-2005, 07:15
C# kannste aber auch schon wunderbar unter Linux einsetzen, sogar die unter Windows kompilierten Programme laufen unter Linux. Stichwort: Mono Projekt.


Und hätte ich deinen Thread eher entdeckt *lol* hätt ich dir auch helfen können. :) C# respektive die .NET Philosophie ist 'ne dolle Sache. Da kommt mal ausnahmsweise was von Microjunk, das echt Hand und Fuß hat.

Andy1988
13-05-2005, 09:36
Jo, weiß ich!
Allerdings fehlen mir leider einige Sachen im Mono Framework. Ich hab zum Beispiel noch keine Klassen für XML Files oder gefunden. Das so Sache wie System.Windows.Forms nich drin sind oder so is klar.

Und das wichtigste ist, dass Mono Develop noch kein Debugging unterstützt.

7.e.Q
13-05-2005, 10:54
Stimmt, aber is ja alles in Arbeit. :D

BeS
13-05-2005, 12:30
Jo, weiß ich!
Allerdings fehlen mir leider einige Sachen im Mono Framework. Ich hab zum Beispiel noch keine Klassen für XML Files oder gefunden.


unter System.Xml gibt es einiges zu XML, habe es aber selber noch nicht benutzt, kann also nicht viel dazu sagen.



Das so Sache wie System.Windows.Forms nich drin sind oder so is klar.

Und das wichtigste ist, dass Mono Develop noch kein Debugging unterstützt.

Sowohl am Debugger für Monodevelop als auch an Windows.Forms wird für Mono 1.2 (release wahrscheinlich im September) gearbeitet.
Wobei Gtk# eh viel besser ist als Windows.Forms... ;)

Andy1988
13-05-2005, 12:55
Jo, wie gesagt. Ist in Arbeit!
Son riesen Framework is ja auch nich mal eben geschrieben.

Ich frag mich, wie die das mit dem .NET 2.0 machen wollen, wenn die 1.1 noch nich fertig integriert haben! Ohne jetzt abwertend zu wirken!