# Fehler - ModName: msvbvm60.dll Offset: 00063fea



## Deadman666 (22. Mai 2007)

Hallo erstmal  . Ich bin neu hier und hab von einem Kollegen erfahren dass man hier sehr gute Hilfe erhält. 

Hier mein Problem (hab die Forumsuche bereits erfolglos verwendet):
Ich habe ein Programm in Visual Basic 6.0 geschrieben und habs dann kompiliert. Bei mir läuft mein Programm ohne Probleme. Nur musste ich feststellen dass dies fast nur bei mir der Fall ist. Bei den meisten tritt folgender Fehler auf. Ich hatte deshalb auch schon meinen PC formatiert und die DLL erneuert, vbvm60.dll mitgeben, usw. Hat alles nichts genützt. Nun bin ich ratlos und frage euch um Hilfe. Hier ein Screenshot des Fehlers:







PS: Ein User mit dem selben Fehler hat mir mitgeteilt, dass es wenn er nicht mit dem Internet verbunden ist der Fehler zwar nicht auftritt, jedoch andere auftreten. Hier die ErrorLogs.txt



> ##################################################################################################################################################################
> # Date: 22.05.2007 @ 19:44:41
> # Procedure Name: Form_Load
> # Module Name: Frmmain
> ...



Danke schon jetzt für jede Hilfe  .


----------



## Alex F. (23. Mai 2007)

also es muss an einer von Dir verwendeten dll liegen, die auf den anderen Client Systemen nicht installiert oder registriert ist.

Schau mal unter Projekt -> Verweisse alle angehakten Komponenten durch. Diese müssen dann entweder auch im Programmverzeichnis des Clients liegen oder an der hier aufgelisteten stelle. Genauso auch mit den Steuerelementen Rechtsklick auf die Toolbox ->Steuerelemente hinzufügen und Pfade überprüfen.

Dein Error Log oben ist nicht sonderlich Auschlussreich da es eigentlich nur 2 Fehler sind ein Typenunverträglich der ein Folgefehler aus oben beschrieben ist und ein Subscript out of Range der jetzt vermutlich eher nebensächlich ist. 

Grüsse bb


----------



## Deadman666 (23. Mai 2007)

Danke für die Antwort  .
Die Komponenten habe ich bereits alle mitgegeben. Ich habe auf mit dem "Package and Deployment Wizard" ne Installierbare Version meines Programm erstellt um zu testen obs eventuell an einem Komponenten liegt, der fehlt. Ohne Erfolg, gleicher Fehler.


----------



## Alex F. (23. Mai 2007)

Benutzt du denn irgendwelche exotischen dlls oder ocx'e ? 
Interessant wäre auch die Funktion "tmr_detect_Timer"

Kannst du das Paket vielleicht mal uploaden dann installier ich das bei mir (hab nämlich kein vb installiert und könnte dann mal den "dumm"- User test machen )

Grüsse bb

PS: Ich wäre dir dankbar wenn du dein Err Log ein bißchen kürzt dann muss man zum antworten nicht soviel scrollen.


----------



## Deadman666 (23. Mai 2007)

Zum verwenden von den Programmen die in vb gecodet sind, muss man sich ja nicht vb installieren, oder liege ich da falsch?

Kann das Packet schon raufladen, falls du es versuchen willst  .

PS: Ich hab mit einem User der das gleiche Problem hat nun folgendes getestet:
-> Er hat mir beschrieben das beim Ladebildschirm meines Programms bevor die Anwendung crasht, die txt_status.Text nen Text ausgibt (ist normal). Das heisst, meine Anwendung funktioniert bis zu einer gewissen Stelle und es gibt dann den Crash. Ich habe dann in gewissen Abständen MsgBox's eingebaut, diese Nummeriert und die fertige Anwendung an den User gesendet. Ich bin mir nun trotzdem nicht sicher wo genau das Problem liegt. Jedoch hat die Anwendung neue Fehler ausgespuckt:

Komponenten die ich verwende:
- comdlg32.ocx
- fkTray.ocx
- HookMenu.ocx
- LVbuttons.ocx
- MSINET.OCX
- MSWINSCN.OCX
- RICHTX32.OCX
- shdocvw.dll
- Tab23.ocx
- vbalODCL6.ocx

1.





2.





3.


----------



## ronaldh (23. Mai 2007)

Hallo,

ich würde mal LVButtons.ocx manuell (mit REGSVR32) auf dem Rechner registrieren. Ich hatte ähnliche Fälle auch schon, dass Programme, die eigentlich überall liefen (hunderte Male installiert und ok) bei manchen Rechner aus unerfindlichen Gründen zunächst nicht laufen wollten. Jedoch hatte ich das Setup damals mit InstallShield erstellt, und nicht mit dem Verpackungs- und Weitergabeassistenten.

In diesem Fall half es, bestimmte fehlende OCXe zu registrieren. Danach lief dann alles. 

Grüsse
ronaldh


----------



## Deadman666 (23. Mai 2007)

Eigentlich sollte dies bereits beim Laden des Programme passieren. Hier die Source die dafür zuständig ist:


```
File1 = WinDirectory & "\system32\LVbuttons.ocx"
File2 = WinDirectory & "\system32\shdocvw.dll"
File3 = WinDirectory & "\system32\RICHTX32.OCX"
File4 = WinDirectory & "\system32\MSINET.OCX"
File5 = WinDirectory & "\system32\MSWINSCN.OCX"
File6 = WinDirectory & "\system32\Tab23.ocx"
File7 = WinDirectory & "\system32\COMDLG32.OCX"
File8 = WinDirectory & "\system32\BASSMOD.dll"
File9 = WinDirectory & "\system32\HookMenu.ocx"
File10 = WinDirectory & "\system32\fkTray.ocx"
File11 = WinDirectory & "\Fonts\volterf"
File12 = WinDirectory & "\Fonts\dc_of"
File13 = WinDirectory & "\Fonts\dc_sf"
File14 = WinDirectory & "\system32\vbalODCL6.ocx"

 Dim strOldFile As String
 Dim strNewFile As String

 If fileexists(File1) = False Then
 strOldFile = App.Path & "\LVbuttons.ocx"
 strNewFile = File1
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "LVbuttons.ocx", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)                                                                                                                               'mit der "regsvr32.exe" aufgerufen wird. Als Parameter wird "/s" fuer Silent und der Pfad zum mswinsck.ocx angegeben (das was registriert wird).
 SleepUntil (1000)
 End If
 If fileexists(File2) = False Then
 strOldFile = App.Path & "\shdocvw.dll"
 strNewFile = File2
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "shdocvw.dll", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File3) = False Then
 strOldFile = App.Path & "\RICHTX32.OCX"
 strNewFile = File3
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "RICHTX32.OCX", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 End If
 If fileexists(File4) = False Then
 strOldFile = App.Path & "\MSINET.OCX"
 strNewFile = File4
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "MSINET.OCX", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File5) = False Then
 strOldFile = App.Path & "\MSWINSCN.OCX"
 strNewFile = File5
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "MSWINSCN.OCX", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File6) = False Then
 strOldFile = App.Path & "\Tab23.ocx"
 strNewFile = File6
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "Tab23.ocx", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File7) = False Then
 strOldFile = App.Path & "\COMDLG32.OCX"
 strNewFile = File7
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "COMDLG32.OCX", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File8) = False Then
 strOldFile = App.Path & "\BASSMOD.dll"
 strNewFile = File8
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "BASSMOD.dll", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File9) = False Then
 strOldFile = App.Path & "\HookMenu.ocx"
 strNewFile = File9
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "HookMenu.ocx", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File10) = False Then
 strOldFile = App.Path & "\fkTray.ocx"
 strNewFile = File10
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "fkTray.ocx", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File14) = False Then
 strOldFile = App.Path & "\vbalODCL6.ocx"
 strNewFile = File14
 FileCopy strOldFile, strNewFile
 Call ShellExecute(Me.hwnd, "Open", "regsvr32.exe", "vbalODCL6.ocx", WinDirectory & "\system32\", 1) 'ShellExecute ist ne WinApi (guckst du oben)
 SleepUntil (1000)
 End If
 If fileexists(File11) = False Then
 strOldFile = App.Path & "\volterf"
 strNewFile = File11
 FileCopy strOldFile, strNewFile
 SleepUntil (1000)
 End If
 If fileexists(File12) = False Then
 strOldFile = App.Path & "\dc_of"
 strNewFile = File12
 FileCopy strOldFile, strNewFile
 AddFontResource (App.Path & "\dc_of")
 SleepUntil (1000)
 End
 End If
 If fileexists(File13) = False Then
 strOldFile = App.Path & "\dc_sf"
 strNewFile = File13
 FileCopy strOldFile, strNewFile
 AddFontResource (App.Path & "\dc_sf")
 SleepUntil (1000)

 End
 End If
```

Hier noch das fileexists-Module:

```
Option Explicit
Const MODULE_NAME As String = "FileExistCheck"
Function fileexists(ByVal Path As String) As Boolean
On Error GoTo fileexists_false

    Dim X As Long
    X = FreeFile

    Open Path$ For Input As X
    fileexists = True
    Close X
    GoTo TheEnd:

fileexists_false:
    fileexists = False

TheEnd:
End Function
```

Und das WindowsDirectory-Module:

```
Option Explicit
Const MODULE_NAME As String = "Tmp"

Const SW_SHOWMAXIMIZED = 3
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWDEFAULT = 10
Const SW_SHOWMINNOACTIVE = 7
Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Function OpenLocation(URL As String, WindowState As Long) As Long

    Dim lHWnd As Long
    Dim lAns As Long

    lAns = ShellExecute(lHWnd, "open", URL, vbNullString, _
    vbNullString, WindowState)
   
    OpenLocation = lAns

End Function
```

-> Der User mit den Fehlern hat nun von Hand "regsvr32 LVbuttons.ocx" & "regsvr32 fkTray.ocx" ausgeführt (hat die beiden Fehler anscheinend behoben). 

Nun taucht folgender Fehler auf:





Er hats auch schon mit "regsvr32 vbalODCL6.ocx" probiert, ohne Erfolg.


----------



## DrSoong (23. Mai 2007)

Zip dein ganzes Projekt inklusive der OCX's mal und hängs hier an, mit dem Quellcode und Einzelschritt könnten wir das ganze mal selbst durchgehen.


Der Doc!


----------



## Deadman666 (26. Mai 2007)

@DrSoong: Habs Ihnen per PN zukommen lassen. Ich hoffe es ist angekommen 

-> Ich hab nun die paar Fehler gefixt, die bei dem User ansonsten noch erschienen. Der "msvbvm60.dll" Fehler blieb jedoch. Ich hab schon alles abgesucht nach ner Lösung, doch finde ich nur Beiträge in anderen Foren und niemand weiss weiter :/


----------



## DrSoong (26. Mai 2007)

Danke, habs bekommen, kann mich aber erst leider Sonntag ransetzen, da ich hier kein VB habe. Werds mir an Pfingsten mal ansehen und mich am Montag melden.


Der Doc!


----------



## Deadman666 (26. Mai 2007)

Danke vielmals  . Ich werd sie Ihnen nochmal schicken, da ich noch ein paar Fehler selber gefixt habe, sowie vergessen hab den nötigen ErrorHandler beizulegen.


----------

