Wer mit VC++ arbeitet kennt Compiler-Listing-Dateien. Sie enthalten die Kombination von Quellcode und zugehörigen Assembler-Anweisungen. Diese Dateien können beim Kompilieren eines Programms erstellt werden. Die VB6-IDE enthält keine Option, durch die man ein Listing-File anfordern kann, obwohl der in VB6 verwendete C-Compiler zur Erstellung von Native-Code (Systemcode) diese Möglichkeit bietet. Wenn man sich nicht auf die Suche nach Add-Ins machen möchte, die das Erstellen von Listings erlauben, kann man statt dessen auf ein relativ einfaches Verfahren zurückgreifen.
Ab sofort werden alle Compileraufrufe der VB-IDE von C2.EXE abgefangen und Sie werden gefragt, ob Sie ein Listing-File erstellen möchten. Falls Sie bejahen, wird im Pfad des jeweils übersetzten Moduls ein File mit der Extension '.LST' vom Compiler erstellt (nur beim Erstellen von Native-Code). Ein bereits bestehendes gleichnamiges Listing-File wird stets gelöscht. Falls Sie diese Änderungen rückgängig machen möchten, löschen Sie die Datei 'C2.EXE' und benennen Sie 'VBC.EXE' wieder in 'C2.EXE' um. Sie können den Meldebox-Aufruf im Code auskommentieren. In diesem Fall werden immer Listing-Files zu allen übersetzten Code-Dateien erstellt. Bereits bestehende Listing-Files werden jeweils automatisch vom Compiler überschrieben; falls Schreibschutz gesetzt ist, wird eine Warnung angezeigt. Hinweise:
' ==================================================================== ' Programm, das die IDE-Compileraufrufe abfängt und ' die Option für eine LISTING-Datei hinzufügt (falls gewünscht) ' Schritt-Folge: ' 1. Dieses Programm übersetzen ('Sub Main') ' 2. VB6-Compiler 'C2.Exe' in VBC.EXE umbenennen ' 3. Dieses Programm muss 'C2.EXE' genannt und ' in den VB6-Ordner kopiert werden ' ==================================================================== Option Explicit ' vereinfachte UDTs für die Prozess-Erzeugung Private Type PROCESS_INFO hProcess As Long x(1 To 12) As Byte End Type Private Type STARTUP_INFO Size As Long Reserved As String Desktop As String Title As String x(1 To 28) As Byte Flags As Long Show As Integer y(1 To 16) As Byte End Type ' API-Funktionen für die Prozess-Erzeugung Private Declare Function CreateProcess Lib "Kernel32" _ Alias "CreateProcessA" ( _ ByVal AppName As Long, _ ByVal CmdLine As String, _ ByVal ProcAttr As Long, _ ByVal ThreadAttr As Long, _ ByVal InheritedHandle As Long, _ ByVal CreationFlags As Long, _ ByVal Env As Long, _ ByVal CurDir As Long, _ Startup As STARTUP_INFO, _ Process As PROCESS_INFO) As Long Private Declare Function WaitForSingleObject Lib "Kernel32" ( _ ByVal Handle As Long, _ ByVal MilliSeconds As Long) As Long Private Declare Function CloseHandle Lib "Kernel32" ( _ ByVal Object As Long) As Long ' Rückgabe von WaitForSingleObject Private Const WAIT_TIMEOUT = 258& Private Const WAIT_FAILED = &HFFFFFFFF Private Const INFINITE = &HFFFFFFFF Const cTitel As String = "VB-Kompilierung (Systemcode)" Private Sub Main() Dim r As Integer ' Dialog-Reaktion Dim t1 As Long, t2 As Long ' Position Dateiname Dim out_dat As String, lst_dat As String ' Pfad-/Dateiname Dim dat As String, d() As String ' Dateiname (Dialog) Dim CmdLine As String, CmdLineO As String ' Kommandozeile ' Abfrage des IDE-Compileraufrufs CmdLineO = Command() If Trim(CmdLineO) <> "" Then ' Name des zu kompilierenden Files t1 = InStr(CmdLineO, "-f") t2 = InStr(t1 + 5, CmdLineO, Chr(34)) ' Pfad- und Dateinamen aus Kommandozeile lesen If t1 > 0 And t2 > t1 + 10 Then out_dat = Mid$(CmdLineO, t1 + 4, t2 - (t1 + 4)) ' Name der zugehörigen Listing-Datei (.LST) lst_dat = out_dat + ".LST" End If If out_dat <> "" Then On Error Resume Next ' bestehendes List-File ggf. löschen Kill lst_dat DoEvents On Error GoTo 0 dat = Dir(lst_dat, vbNormal Or vbReadOnly Or vbHidden) If dat <> "" Then MsgBox "Warnung: bestehendes Listing " + vbCrLf + lst_dat + vbCrLf + _ "kann nicht gelöscht werden", vbExclamation, cTitel CmdLine = CmdLineO Else ' Listfile anfordern (Compiler-Option FAcs und Fa) CmdLine = Replace(CmdLineO, "-basic", "-basic -FAcs -Fa" + _ Chr(34) + lst_dat + Chr(34)) ' ********************************************************** ' Dialog: Abfragen ob Listfile gewünscht wird d() = Split(out_dat, "\") dat = d(UBound(d)) r = MsgBox("Übersetzung: " + vbCrLf + dat$ + vbCrLf + _ vbCrLf + "Listfile erzeugen?", vbQuestion + vbYesNo, cTitel) If r = vbNo Then ' Zurücksetzen des Compiler-Aufrufs CmdLine = CmdLineO End If ' *********************************************************** End If ' Melde-Box beenden lassen DoEvents End If ' VB6-Compiler aufrufen: umbenannt als 'VBC.EXE' ShellWait App.Path + "\VBC.exe " + CmdLine End If End Sub Public Function ShellWait(ByVal Execute As String) As Boolean ' Funktion erstellt einen Prozess und wartet ' bis der Prozess sich meldet Dim Prc As PROCESS_INFO ' Infos zum erstellten Prozess Dim Startup As STARTUP_INFO ' Prozess-Start-Infos Dim Ret As Long ' API-Rückgabe Const MilliSeconds As Long = INFINITE ' unbegrenzt warten ' Initialisierung Prozess-Start With Startup .Size = Len(Startup) .Flags = 1 End With ' Prozess generieren Ret = CreateProcess(0&, Execute, 0&, 0&, 1&, &H20&, 0&, 0&, Startup, Prc) If Ret = 0 Then MsgBox "Warnung: Kompilierung lässt sich nicht starten", vbCritical, cTitel DoEvents Exit Function End If ' Kompilierung abwarten Ret = WaitForSingleObject(Prc.hProcess, MilliSeconds) If Ret = WAIT_FAILED Or Ret = WAIT_TIMEOUT Then MsgBox "Warnung: Compiler reagiert nicht", vbCritical, cTitel DoEvents End If ' Prozess-Handle freigeben CloseHandle Prc.hProcess End Function ' =========================================================================== Dieser Tipp wurde bereits 17.210 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |