int oder Int32 in C#?

Ab und an fragt man sich als Anfänger in der C# Programmierung, welche Typen denn jetzt zu nutzen sind. int? oder doch eher Int32? Wo ist der Unterschied? Kurz gesagt: Es gibt keinen. int in kleiner Schreibweise erzeugt genauso den Typ Int32 als würde man es gleich so schreiben. Gibt es dafür auch Beweise? Natürlich! Man schaue sich nur folgenden Quellcode an:

int a = 10;
Int32 b = 10;

Console.WriteLine(a.GetType().ToString());
Console.WriteLine(b.GetType().ToString());

Die nachfolgende Ausgabe bestätigt an dieser Stelle schon die vorher aufgestellte Behauptung:

System.Int32
System.Int32

In beiden Fällen bekommt man den gleichen Typ. Wer es dann noch ganz genau wissen will, mag sich folgenden IL Code zu Gemüte führen:

.locals init ([0] int32 a,[1] int32 b,

[...]

IL_0008:  box        [mscorlib]System.Int32
IL_000d:  call       instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0012:  callvirt   instance string [mscorlib]System.Object::ToString()
IL_0017:  call       void [mscorlib]System.Console::WriteLine(string)
IL_001c:  nop
IL_001d:  ldloc.1
IL_001e:  box        [mscorlib]System.Int32
IL_0023:  call       instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0028:  callvirt   instance string [mscorlib]System.Object::ToString()
IL_002d:  call       void [mscorlib]System.Console::WriteLine(string)

Auch hier wird zwei Mal das gleiche generiert. Es steht also fest: Es gibt keinen Unterschied zwischen int und Int32. Ähnlich verhält es sich auch mit anderen Typen. Beispielsweise entspräche long dem Framework Typ Int64. Das ist übrigens unschön für C++ Programmierer. Dort ist ein long nämlich nicht so groß.

Welche Schlüsselwörter mit welchen Typen in Verbindung stehen, kann man (und sollte man!) daher in der .Net Dokumentation nachschlagen.

Zum Abschluss das Ganze noch mal für string und String, was ich persönlich anfangs auch ziemlich verwirrend fand:

String s = "Hallo";
string t = "Hallo";

Console.WriteLine(s.GetType().ToString());
Console.WriteLine(t.GetType().ToString());

Console.WriteLine((s is string).ToString());
Console.WriteLine((t is String).ToString());

Ausgabe:

System.String
System.String
True
True

Hier sieht man also sogar in doppelter Ausführung, dass es keinerlei Unterschied gibt. Den IL Code spare ich mir an dieser Stelle Smiley

Wie man VPN Client Probleme löst

Da wollte ich mir heute nebenbei einen VPN Client für den Hochschulzugang von zuhause aus einrichten und natürlich hat man wieder nur Probleme.

Der erste Versuch galt dem Client von Shrewsoft, der mir wärmstens empfohlen wurde. Quittiert wurde der Setupversuch mit der Meldung, dass die Network Komponente nicht installiert werden konnte. Aha, alles klar. Um unendliches Googlen zu vermeiden, entschloss ich mich, den von der Hochschule empfohlenen Cisco VPN Client auszuprobieren. Wiederum bekam ich eine Fehlermeldung während des Setups. Fehler 2738.

Nun gut, jetzt musste also doch die Suchmaschine ran. Nach einigen halben Lösungen hat dann folgende Variante funktioniert:

Zuerst muss man die registrierte vbscript.dll aus der registry löschen. Also CommandPrompt aufgemacht (bitte als Admin) und folgendes eingetippt:

reg delete “HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{B54F3741-5B07-11CF-A4B0-00AA004A55E8}” /f

Dann muss man die gute vbscript.dll erneut registrieren. Ebenfalls im Commandprompt kann man also in den System32 Ordner navigieren:

cd %systemroot%\system32

und anschließend noch einen kleinen Befehl ausführen:

regsvr32 vbscript.dll

Kleiner Tipp: Zwischen den Schritten neustarten schadet nicht Zwinkerndes Smiley

Soooo. Bei vielen wird jetzt schon die Installation vom Cisco Client erfolgreich verlaufen. Nicht jedoch bei mir, da ich den unsäglichen Fehler gemacht habe Virtualisierungssoftware installiert zu haben, die bestimmte Networkfilter verwenden, von denen Windows aber per Default nur eine bestimmte Anzahl erlaubt. Die VPN Clients möchten aber auch gerne welche (neue). Dies wird dann mit Fehler 27850 gemeldet.

Erneutes Googlen brachte dann schon oben genannte Gründe ans Tageslicht. Die einfache Lösung: Die maximal Anzahl (8 per default) der Filter erhöhen. Das geht so:

regedit öffnen und dort folgendem Pfad nachgehen:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\MaxNumFilters

Hier kann man nun die Nummer beispielsweise auf 10 oder 14 erhöhen. Anschließend hat zumindest bei mir wenigstens die Installation des Cisco Clients geklappt. Danach wurde dann auch Shrewsoft ausprobiert und siehe da: Auch hier wird ohne Murren installiert. Smiley