| 

.NET C# Java Javascript Exception

7
Ich bin gerade dabei, Anwendungen von VB auf C# zu übertragen. Dabei ergeben sich diverse Probleme, da es mitunter zum Überlauf kommt. Nach Recherche habe ich herausgefunden, dass C# nicht so flexibel bei den Typkonvertierungen ist, wie VB (implizite/explizite Konvertierung/Casting). Wertzuweisungen von einem Typ in einen anderen Typ sind immer nur dann zulässig, wenn es nicht zum Überlauf kommt, ansonsten ist der Entwickler selbst für das casting verantwortlich. Gibt es Addins, die solch fehlerhafte Anweisungen ermitteln oder wie schreibe ich selbst ein solches Addin, das entsprechende Korrekturen eigenständig vornimmt?
News:
12.10.2011
HeikeH. 41 3
Wie konvertierst Du denn - von Hand oder mit irgendeinem Automatismus?
Das Addin soll noch auf dem VB-Code arbeiten, vermute ich? Denn ein "Addin", das auf C#-Seite die problematischen Anweisungen zumindest ermittelt, gibt es ja schon: der Compiler.
Matthias Hlawatsch 12.10.2011
3 Antworten
3
Hallo HeikeH,

vielleicht hilft für eine erste Identifizierung das Aktivieren von Option Strict in VB.
Dann sollte der VB Compiler alle impliziten narrowing conversions als Fehler bemängeln. Dann kannst Du es erstmal auf VB Seite geraderücken. Die Übertragung von VB nach C# sollte dann zumindest nicht mehr an dieser Art Konvertierung scheitern.

Viel Erfolg,
Florian
12.10.2011
ffordermaier 8,4k 3 9
3
Option Explicit On sollte man in VB auch aktivieren, sonst kann es auch recht unschöne Effekte geben.
muffi 12.10.2011
2
Zur automatisierten Portierung kann ich dir folgende Seite in der MSDN empfehlen: Secure your Visual Basic 6.0 investment with Microsoft .NET . Im Bereich How to migrate to Microsoft .NET werden einige Tools zur Portierung aufgeführt.
Für eine kleine Anwendung mag solch eine Portierung ja noch sinnvoll sein. In der Regel würde ich davon abraten und die Software neu entwickeln und bzgl. Architektur auf einen aktuellen Stand bringen.
Dan Appleman sagt hierzu ganz krass (The “Revolt” of the VB MVP’s – An alternate recommendation):
If you have a business that has invested years of development effort in VB6 and VBA code, should you port that code to .NET? We're talking existing working code here - not new projects. By any sane economic rational, the answer is no. In most cases porting is stupid and a complete waste of money.

Ich bin damit zwar nicht direkt auf deine Frage eingegangen, konnte dir hoffentlich trotzdem weiterhelfen.
12.10.2011
Jürgen Luhr 7,1k 2 9
0
Es gibt keinen Unterschied der Datentypen zwischen C# und VB, da beide Sprachen auf dem Typsystem der CLR aufbauen. Das Problem ist, dass der C#-Compiler Zuweisungen wesentlich strenger auf Gültigkeit prüft.

Aus deiner Frage geht nicht hervor, ob du von VB6 oder VB.NET nach C# konvertierst. Bei ersterem würde es sich anbieten zunächst einmal mit dem Migrationsassistenten von Visual Studio die VB6-Anwendung nach .NET zu migrieren. Alternativ gibt es den kostenpflichtigen VB Upgrade Companion der Fa. ArtInSoft (VBUC oder die Limitierte Freeware-Version von VBUC).

Eine kostenlose Alternative (allerdings nur von VB.NET nach C# und umgekehrt) wäre die Open Source IDE SharpDevelop. Mit Ihrer Hilfe kann man komplette Projekte von VB nach C# und umgekehrt konvertieren. Das Ergebnis ist allerdings, zumindest bei komplexeren Projekten, grenzwertig.

Zur Analyse möglicher Probleme vor der Konvertierung habe ich mit dem Project Analyzer der Fa. Aivosto gute Erfahrungen gemacht. Mit diesem kann man sowohl VB6 als auch .NET analysieren.

Generell kann ich von einer Konvertierung bzw. Migration in der Regel nur abraten. Ich habe in der letzten Zeit einige größere VB6-Anwendungen nach .NET migriert und habe nun die undankbare Aufgabe, diese zu warten. Da die Programmstruktur noch nicht den modernen Design-Prinzipien entspricht (Stichwort Spagetti-Code, Copy/Paste), sind Änderungen sehr aufwendig und teuer. Außerdem wäre der Aufwand für eine Neuimplementierung nicht signifikant höher gewesen.

Gruß
Klaus
13.10.2011
luedi 2,2k 1 9

Stelle deine Datentypen-Frage jetzt!