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

Von: , Frage gestellt am Mi, 9. Jan 2008

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

3 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden 0 hilfreich
    Re: VB6 zu VB.Net - (API, Datei-Zeitstempel ändern

    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 ;) 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 :)

    Zu de Typen. Wozu gibt es Klassen? Diesen eignen sich hervorragend als Datenspeicher ;) 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 ;)

    '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 <= 1) Then
                    Console.WriteLine("This directory is less than a day old.")
                Else
                    Console.WriteLine("This directory was created on {0}.", dt)
                End If
    
            Catch e As Exception
                Console.WriteLine("The process failed: {0}", e.ToString())
            End Try
        End Sub
    End Class
    
    
    


    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 :) Kristian
    Alex

    • Antwort von nach 11 Stunden 0 hilfreich
      Re^2: VB6 zu VB.Net - (API, Datei-Zeitstempel ände

      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 ;) 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 ;) ON Error Resume Next etc. gibt es glaube noch, sollte man aber tuenlichst drauf verzichten ;) 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 ;) Aber stimmt, die Objektorientierung ist nun wohl durchgängig. Auch haben sich die Datentypen geaendert! Array's gibt es nach wievor noch :)
      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 ;)
      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 ;)
      Das könnte ein wertvoller Hinweis sein ;) Da muss ich mal genauer hingucken :) 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 :)
      Danke :) War schon mal sehr gut.
      Kristian

      • Antwort von nach 17 Stunden 0 hilfreich
        Re^3: VB6 zu VB.Net - (API, Datei-Zeitstempel ände

        Hallo Kristian, Das ist sicher richtig, ich hatte bewusst untertrieben, um die
        Sache simpel zu halten ;)

        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 ;) 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 ;)

        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 :) ON Error Resume Next etc. gibt es glaube noch, sollte man aber tuenlichst drauf verzichten ;) 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 :) 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 :) Das Prinzip ist das selbe wie der Jitter bei VB 9 ;) Unter VB9 sind alles Objecte! Sogar eine normale Textbox!
        Das war auch bei VB6 schon so mit der Textbox ;) 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 :) Auch haben sich die Datentypen geaendert! Array's gibt es nach wievor noch :)
        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 ;)
        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 :) Du musst eigentlich nur die Anfangsbuchstaben schreiben und den Rest macht VB9 selber :)
        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 ;) Da muss ich mal
        genauer hingucken :) 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 :) Deswegen wurden unter .NET der Namensspace und die Assembly eingeführt ;) 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 :) War schon mal sehr gut.
        Nichts zu danken :) Kristian
        Alex

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!