VB6 zu VB.Net - (API, Datei-Zeitstempel ändern)

Moin,

ich habe mir gerade VisualStudio Express 2008 installiert, also quasi VB.Net, wenn ich das richtig begriffen habe. Da gibt es ja nun ein paar syntaktische und „objektische“ Unterschiede.

Frage 1:
Dieser Code-Migrations-Assistent, den es für die Konvertierung von Classic- zu .NET-Code geben soll - ist der Bestandteil von Express? Oder gibt es den nur in der kostenpflichtigen Version? Es gibt einen Menüpunkt „Upgrade VB6 Code“, aber der funzt nicht (kann irgendwas nicht finden).

Frage 2:
Ich versuche, den Code für die Modifikation der Datei-Zeitstempel mittels API-Aufrufen zu portieren. Code-Beispiele dafür gibt´s ja wie Sand am Meer, aber die sind alle für VB Classic. Bei Express geht es schon damit los, dass es keine Types mehr gibt (jetzt Structures), kein As Any (jetzt Object?) und offenbar auch noch irgendwelche anderen Arrays oderso. Jedenfalls deuten die Fehlermeldungen darauf hin. Hat jemand mal eine erfolgreiche Protierung gesehen von den zugehörigen API-Aufrufen (Get/SetFileTime, OpenFile, …)?

Danke,
Kristian

Moin,

Hallo

ich habe mir gerade VisualStudio Express 2008 installiert,
also quasi VB.Net, wenn ich das richtig begriffen habe. Da
gibt es ja nun ein paar syntaktische und „objektische“
Unterschiede.

Der Unterschied zwischen VB 6 und VB9, was in .Net 2008 enthalten ist enorm. Das hat eigentlich nichts mehr mit VB6 zu tun. Sicher gibt es danoch den einen oder anderen Befehl aus VB6 Zeiten, aber dies haben sie nur aus Kombatibilitaets Gruenden gemacht!

Frage 1:
Dieser Code-Migrations-Assistent, den es für die Konvertierung
von Classic- zu .NET-Code geben soll - ist der Bestandteil von
Express? Oder gibt es den nur in der kostenpflichtigen
Version? Es gibt einen Menüpunkt „Upgrade VB6 Code“, aber der
funzt nicht (kann irgendwas nicht finden).

Den gibt es auch unter VB9! Aber das der Anstandslos funktioniert ist ein Ding der unmöglichlkeit. Du muesstest dann noch selbst Hand anlegen und einiges aendern! Zum Bsp. gibt es unter VB9 die Befehle via Unload und Load nicht mehr! Genauso ist ein Aufruf von Formname. Show auch nicht mehr drinnen und bei Option Strict on, sollte VB9 auch schimpfen.
Wenn du den Source von VB6 hast, bist du schneller wenn du ihn neu tippselst in VB9.

ON Error Resume Next etc. gibt es glaube noch, sollte man aber tuenlichst drauf verzichten :wink: Geht unter VB9 einfacher!

Frage 2:
Ich versuche, den Code für die Modifikation der
Datei-Zeitstempel mittels API-Aufrufen zu portieren.

API Aufrufe gehen glaube unter VB9 noch! Aber wozu? Im Framework hast du ca. 8000 Klassen, wo du eigentlich alles findest!

Code-Beispiele dafür gibt´s ja wie Sand am Meer, aber die sind
alle für VB Classic. Bei Express geht es schon damit los, dass
es keine Types mehr gibt (jetzt Structures), kein As Any
(jetzt Object?)

Unter VB9 sind alles Objecte! Sogar eine normale Textbox!
Auch haben sich die Datentypen geaendert!
Array’s gibt es nach wievor noch :smile:

Zu de Typen. Wozu gibt es Klassen? Diesen eignen sich hervorragend als Datenspeicher :wink:

und offenbar auch noch irgendwelche anderen
Arrays oderso. Jedenfalls deuten die Fehlermeldungen darauf
hin. Hat jemand mal eine erfolgreiche Protierung gesehen von
den zugehörigen API-Aufrufen (Get/SetFileTime, OpenFile, …)?

Ich denke mal nicht? In der Namespace System.IO und dort in den statischen Klassen File und Directory findest du alles was du benötigst :wink:

'Kleines Demo zur veranschaulichung

Imports System
Imports System.IO
Imports System.Text

Public Class Test
 Public Shared Sub Main()
 Try
 Dim dt As DateTime = Directory.GetCreationTime(Environment.CurrentDirectory)
 If (DateTime.Now.Subtract(dt).TotalDays \> 364) Then
 Console.WriteLine("This directory is over a year old.")
 ElseIf (DateTime.Now.Subtract(dt).TotalDays \> 30) Then
 Console.WriteLine("This directory is over a month old.")
 ElseIf (DateTime.Now.Subtract(dt).TotalDays 

Aber wie ich merke, hast du VB9 nicht verstanden und weisst nicht einmal die grundkenntnisse. Sorry aber da wirst du nicht weit kommen!
Du solltest dir lieber erst einmal ein Buch zulegen und ein wenig lernen, sonst kommst du nicht weit :s




> Danke,


Bitte :smile:



> Kristian

Alex

Der Unterschied zwischen VB 6 und VB9, was in .Net 2008 enthalten ist enorm. …

Das ist sicher richtig, ich hatte bewusst untertrieben, um die Sache simpel zu halten :wink:

Den gibt es auch unter VB9! Aber das der Anstandslos funktioniert ist ein Ding der unmöglichlkeit.

Das ist wohl immer so mit Kovertern. Aber ich habe hier eine Konsolenanwendung, die aus einer Handvoll Zeilen besteht, wo irgendwo der Wurm drin steckt, weil es irgendwelche Inkompatibilitäten gibt. Die sollte so ein Konverte ja vielleicht finden :wink:

ON Error Resume Next etc. gibt es glaube noch, sollte man aber tuenlichst drauf verzichten :wink: Geht unter VB9 einfacher!

Gern benutzt in VB und VBA. Und das geht einfacher? Na mal gucken.

API Aufrufe gehen glaube unter VB9 noch! Aber wozu? Im Framework hast du ca. 8000 Klassen, wo du eigentlich alles findest!

Aha. Darauf ist mir noch kein Hinweis untergekommen. System.IO scheint eine von den Klassen-Containern zu sein, oder? Hattest Du unten als „Namespace“ erwähnt.

Unter VB9 sind alles Objecte! Sogar eine normale Textbox!

Das war auch bei VB6 schon so mit der Textbox :wink: Aber stimmt, die Objektorientierung ist nun wohl durchgängig.

Auch haben sich die Datentypen geaendert! Array’s gibt es nach wievor noch :smile:

Ja, die gibt es, aber eine der Fehlermeldungen deutet auf ein Problem mit einem Array hin (Savearray oderso).

Zu de Typen. Wozu gibt es Klassen? Diesen eignen sich hervorragend als Datenspeicher :wink:

Ja, habe ich unter VB6 auch z.T. benutzt. Ist aber aufwendiger zu programmieren, und daher sind Types oder jetzt Structures oft günstiger. Wenn es um REINE Datenhaltung geht.

Ich denke mal nicht? In der Namespace System.IO und dort in den statischen Klassen File und Directory findest du alles was du benötigst :wink:

Das könnte ein wertvoller Hinweis sein :wink: Da muss ich mal genauer hingucken :smile: Das Beispiel unten (danke dafür) sollte dabei helfen.

Aber wie ich merke, hast du VB9 nicht verstanden und weisst nicht einmal die grundkenntnisse. Sorry aber da wirst du nicht weit kommen!

Damit hast Du zumindest in erster Näherung recht. Allerdings liegt das daran, dass ich mich einfach noch nicht mit .NET beschäftigt habe, weil ich nicht wusste, dass Express quasi .NET ist. Aber ich programmiere jetzt seit 13 Jahren, u.a. mit VB und VBA - da sollte es kein größeres Problem sein, da reinzukommen. Am Ende reduziert es sich aus meiner Sicht auf Syntax, weil ich das Grundprinzip nur erkennen , aber nicht erlernen muss, denke ich.

Du solltest dir lieber erst einmal ein Buch zulegen und ein wenig lernen, sonst kommst du nicht weit

Naja. Habe mal in ein, zwei Online-VB.NET-Einführugen geschaut. Hm. Das ist zu Basic - die Probleme, die ICH sehe, sind dort nicht beschrieben, jedenfalls nicht in der Prägnanz, die man als Umsteiger braucht. Aber ich werde mal weitergraben.

Bitte :smile:

Danke :smile: War schon mal sehr gut.
Kristian

Hallo Kristian,

Das ist sicher richtig, ich hatte bewusst untertrieben, um die
Sache simpel zu halten :wink:

Wenn man Probleme hat und nicht weiter weiss, ist es immer ratsam soviel an Infos zu geben wie nur möglich, denn dann kann sich der User besser Gedanken darueber machen und schneller eine Lösung finden :wink:

Das ist wohl immer so mit Kovertern. Aber ich habe hier eine
Konsolenanwendung, die aus einer Handvoll Zeilen besteht, wo
irgendwo der Wurm drin steckt, weil es irgendwelche
Inkompatibilitäten gibt. Die sollte so ein Konverte ja
vielleicht finden :wink:

Ist nicht gesagt. Wenn es nur eine Handvoll Zeilen ist, warum tippselst du es dann nicht neu unter .NET ?
Oder wenn du es nicht schaffst, dann poste doch einfach mal den Source und die Fehlermeldungen die du bekommst. Dann wird Dir sicherlich auch geholfen :smile:

ON Error Resume Next etc. gibt es glaube noch, sollte man aber tuenlichst drauf verzichten :wink: Geht unter VB9 einfacher!

Gern benutzt in VB und VBA. Und das geht einfacher? Na mal
gucken.

Hmmm, eine Fehlerbehandlung unter VB bis zur Version 6 , ging leider nur via On Error … unter VB9 koennte man es auch so machen. Macht man aber nicht. In dem Falle greift man zu einer TRY, Catch und Finally Anweisung. Die ist arg flexibel :smile:

API Aufrufe gehen glaube unter VB9 noch! Aber wozu? Im Framework hast du ca. 8000 Klassen, wo du eigentlich alles findest!

Aha. Darauf ist mir noch kein Hinweis untergekommen. System.IO
scheint eine von den Klassen-Containern zu sein, oder? Hattest
Du unten als „Namespace“ erwähnt.

VB 9 arbeitet mit dem Framework. Das bedeutet auch das das Programm was du mal erstellst und auf einen Rechner ausführen möchtest, du dann dort das Framework installiert haben musst! Das musst du aber nur einmal. Gegenueber VB6 hat das den Vorteil das du keine weiteren DLL etc. ausliefern musst, da diese alle im Framework enthalten sind! Es reicht indem Falle eigentlich das du nur das EXE File auslieferst. Desweiteren hat das noch einen entscheidenden Vorteil.

Bei der Installation vom Framework, liegen die Daten „zwischen Compiliert“ vor. Bei der Installation nun, wird geschaut was für ein Prozessor im System ist und dann der Source dementsprechend und optimiert von den CPU compiliert und installiert. Das hat den grossen Vorteil das deine Anwendungen dann schneller laufen :smile: Das Prinzip ist das selbe wie der Jitter bei VB 9 :wink:

Unter VB9 sind alles Objecte! Sogar eine normale Textbox!

Das war auch bei VB6 schon so mit der Textbox :wink: Aber stimmt,
die Objektorientierung ist nun wohl durchgängig.

Da habe ich mich falsch Ausgedrueckt.
Unter VB 6
Dim strName as String = Normale Variable
Unter VB 9

Dim strName as String -> OBJECT!!

Was die Sache OOP und VB 6 angeht. Naja ein wenig konnte man damit machen, den richtigen Nutzen, also was man alles anstellen kann, das siehst du bei VB9 :smile:

Auch haben sich die Datentypen geaendert! Array’s gibt es nach wievor noch :smile:

Ja, die gibt es, aber eine der Fehlermeldungen deutet auf ein
Problem mit einem Array hin (Savearray oderso).

Wenn man den Fehlertext kennen würde, dann koennte man mehr dazu sagen!

Zu de Typen. Wozu gibt es Klassen? Diesen eignen sich hervorragend als Datenspeicher :wink:

Ja, habe ich unter VB6 auch z.T. benutzt. Ist aber aufwendiger
zu programmieren, und daher sind Types oder jetzt Structures
oft günstiger. Wenn es um REINE Datenhaltung geht.

Unter VB9, ist das rel. simpel :smile: Du musst eigentlich nur die Anfangsbuchstaben schreiben und den Rest macht VB9 selber :smile:
Hierbei sei zu erwaehnen das du zum Bsp. Daten schreibgeschuetzt erstellen kannst, was mit einer Strucktur nicht geht!

Das könnte ein wertvoller Hinweis sein :wink: Da muss ich mal
genauer hingucken :smile: Das Beispiel unten (danke dafür) sollte
dabei helfen.

VB9 hat soweit ich weiss, weit ueber 8000 Klassen!
Alle auswendig zu kennen ist ein Ding der unmöglichkeit. Aber dafür hat man die MSDN :smile: Deswegen wurden unter .NET der Namensspace und die Assembly eingeführt :wink:

Damit hast Du zumindest in erster Näherung recht. Allerdings
liegt das daran, dass ich mich einfach noch nicht mit .NET
beschäftigt habe, weil ich nicht wusste, dass Express quasi
.NET ist. Aber ich programmiere jetzt seit 13 Jahren, u.a. mit
VB und VBA - da sollte es kein größeres Problem sein, da
reinzukommen. Am Ende reduziert es sich aus meiner Sicht auf
Syntax, weil ich das Grundprinzip nur erkennen , aber nicht
erlernen muss, denke ich.

Da muss ich dich enttaeuschen!
ich selbst schreibe unter VB6 auch schon etliche Jahre. Aber .NET zu lernen ist wie als wenn du neu anfaengst, da dort eigentlich alles anders ist :s
Angefangen vom Syntax über compilieren etc :s
Du solltest zum Bsp. auch wissen was FCL, BCL, Jitter etc. ist und wie .NET arbeitet.

Ein simples Bsp.

ein Project 2 Formen. In Form 1 ein Button

'Code in Form1
Option Strict Off
Option Explicit Off

Public Class Form1

 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Try
 Dim frm As New Form2
 Form2.ShowDialog()
 Catch ex As Exception
 MsgBox(" Fehler beim laden von Form2")
 End Try
 End Sub

 Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 End Sub
End Class

'Code in Form 2
Public Class Form2

 Private Sub Form2\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Dim lblName As Label
 Dim strName As String = lblName.ToString
 End Sub
End Class

Mal abgesehen davon das man Option Strict on programmieren soll und die beim abschreiben schon eine Warnung bekommst, trotzdem das Demo.
Was passiert ? Du startest das Project, drueckst den Button. Es wird versucht ( TRY) die Form2 zu laden. Aber es geht nicht! Denn lblname ist vom Typ Label und wird verwendet bevor ihm Daten zugeteilt werden. Ergo ist es Nothing. Nun versuchst du dem Object strname welches ein String ist Nothing zuzuweisen. Ergo es geht nicht und es tritt ein Fehler auf. Es geht zurueck zur Form 1 und normalerweise in den Catch Block, wo eine Ausgabe angezeigt wird das die Form nicht geladen wird.
Sofern du es in der IDE testet, funktioniert das einwandfrei. Compiliere es aber mal und teste dann das EXE File ?

Was passiert? Form1 wird angezeigt und nun druecke mal den Button?
Du bekommst eine Fehlermeldung vom feinsten an den Kopf geworfen,aber die definierte msg von Dir nicht. Würde nun dort eine explicite Fehlerbehandlung stattfinden, so würde würde sie nicht ausgefuehrt werden und dein proggi würde machen was es will :s

Warum das so ist, also warum der Catch Block nicht ausgefuehrt wird und was man dagegen macht, dazu musst du .NET verstehen wobei wir wieder bei dem Thema Büchern und lernen wären :s
Auch das hier zu erklären, würde den Rahmen sprengen :s

Du solltest dir lieber erst einmal ein Buch zulegen und ein wenig lernen, sonst kommst du nicht weit

Naja. Habe mal in ein, zwei Online-VB.NET-Einführugen
geschaut. Hm. Das ist zu Basic - die Probleme, die ICH sehe,
sind dort nicht beschrieben, jedenfalls nicht in der Prägnanz,
die man als Umsteiger braucht. Aber ich werde mal
weitergraben.

Wie gesagt .NET hat sogut wie nichts mehr mit VB6 zu tun!
Sicher sagst du , ach Objecte was ist das schon, das kenne ich aus VB6. Aber dann werfe ich dir mal ein paar Worte an den Kopf.

Overloads
Shared
Override
MustOveride
Mustinherits
Vererbung
ReadOnly
WriteOnly
Protected
Konstructor NEW
Polymorphie etc.

Es hat sich in der Hinsicht sehr sehr viel geändert!
Aber was ich auch erwaehnen sollte. Das wenn man bereits programmiert hat, egal welche Sprache, dann ist der Umstieg um einiges leichter, als wenn man komplett neu anfaengt!

Danke :smile: War schon mal sehr gut.

Nichts zu danken :smile:

Kristian

Alex