Laufzeitfehler 5 in exe, nicht in der Entwicklungsumgebung

08/02/2009 - 21:39 von Klaus Trapp | Report spam
Hallo,

wenn ich meine kleine Anwendung unter VB 6.0 (SP 6) in der IDE starte
làuft eine spezielle Funktion bestens. Sobald ich eine neue EXE anlege
und diese starte, bekomme ich dort Laufzeitfehler 5.

Leider sehe ich keine Möglichkeit, wie ich diesen Fehler eingrenzen
kann. Im Netz gibt es hunderte von Hinweisen zu diesem Fehler, von
denen diejenigen, die ich mir angesehen habe, nicht weiterführen.

Ich versuche mal kurz zu beschreiben, was gemacht wird:

Mein Programm liest eine XML-Datei ein (im folgenden alles immer im
gleichen Verzeichnis wie die EXE) und veràndert aufgrund des Inhalts
der XML-Datei das Aussehen des Hauptformulars (und macht noch etwas
mehr). Eine Menüfunktion ermittelt alle anderen XML-Dateien in dem
Verzeichnis (sofern vorhanden) und bietet diese in einem modularen
Formular in einer Combobox an.
Dort erfolgt eine Auswahl, das Formular übergibt den gewàhlten Namen an
das Hauptformular und dort wird die Routine gestartet, die die XML-Datei
einliest und das Hauptformular anhand des Inhalts modifiziert.
Diese wurde bereist beim Start erfolgreich durchlaufen, nur auf der
Basis einer anderen XML-Datei.
Falls keine Auswahl erfolgt (= Abbruch), tritt kein Fehler auf, d.h.
es ist zu vermuten, dass es mit der XML-Behandlung zusammen hàngt.

Wie gesagt, das làuft sehr gut in der IDE, als EXE bekomme ich im Laufe
des Einlesens der ausgewàhlten XML-Datei den Laufzeitfehler 5.
Teilweise wird das Hauptformular noch veràndert, dann tritt der Fehler
auf, dann wird ggf. noch ein regulàre Fehler gemeldet (im meist
getesteten Fall über ein nicht vorhandenes Verzeichnis) und dann
verabschiedets sich das Progarmm sang- und klanglos.

Hier ein paar technische Angaben:
Entwickelt wird unter Windows 2000 Pro SP 4 (unter Win XP tritt der
Fehler auch auf). msxml wird in Version 4.0 benutzt. Ferner wird die
Scripting Runtime (scrrun.dll) benutzt.

Dummerweise làsst sich der Fehler auch keiner Routine zuordnen; er làsst
sich nicht per Error-Behandlung abfangen, denn dann stünde im Titel
nicht der Name des Programms sondern eine MsgBox-Titel aus der Routine.

Hat jemand eine Idee, wie ich mich dem Fehler weiter nàhern könnte?

Gruß aus Köln am Rhein
Klaus

www.trappdata.de
 

Lesen sie die antworten

#1 Thorsten Albers
08/02/2009 - 23:58 | Warnen spam
Klaus Trapp schrieb im Beitrag
<#...
Hat jemand eine Idee, wie ich mich dem Fehler weiter nàhern könnte?



Einer der wesentlichen Unterschiede bei der Ausführung in der IDE und in
der EXE, daß der Code in der IDE als interpretierter P-Code ausgeführt wird
und in der EXE als System-Code - sofern die entsprechenden
Kompiliereinstellungen auf den Standardwerten belassen bzw. entsprechend
eingestellt wurden.
P-Code ist wesentlich 'fehlertoleranter' insbesondere bei der Verwendung
von Prozeduren des Windows-API. Werden bestimmte interne Daten durch
fehlerhafte Verwendung von Windows-API-Prozeduren überschrieben, kann unter
P-Code hier (Stack) teilweise automatisch korrigiert werden, unter
System-Code dagegen nicht.
Der erste Ansatz ist daher, alle verwendeten Prozeduren in externen
Bibliotheken (d.h. per Declare-Anweisung deklarierte Prozeduren) auf
korrekte Parameter- und Rückgabewert-Deklarationen zu prüfen, und ebenso
alle in diesem Zusammenhang verwendeten Deklarationen, insbesondere von
Strukturen ('Benutzerdefinierte Typen'). Beliebte Fehler sind z.B. die
Verwendung von VB 'Boolean' für C 'BOOL' (-> 'Long'), VB 'Integer' für C
'int' (-> 'Long'), VB 'String' für C 'LPSTR'. Für das 'Abschmieren' ist
immer ein guter Kandidat das Beschreiben von nicht alloziertem Speicher,
z.B. wenn irgendwo an eine externe Prozedur ein Leerstring statt eines
vordimensionierten Strings (z.B. 'MyString$ = Space$(100)') übergeben wird.
Falsche Verwendung von CopyMemory() bzw. RtlMoveMemory() ist auch eine
beliebte Fehlerquelle.

Mehr làßt sich dazu aus meiner Sicht ohne Quellcode nicht sagen...

Thorsten Albers

albers (a) uni-freiburg.de

Ähnliche fragen