Ole Jansen schrieb:
> Moin Moin,
>
> unter Delphi 6 stehe ich vor folgendem Problem:
>
> - es wird ᅵber eine Import-Unit eine externe Funktion in einer DLL
> aufgerufen, die einen kleinen Dialog zeigt.
> (Die DLL mit dem Dialog ist closed source.)
>
> - Auf diesem Dialog gibt es einen Bug. Wenn ein bestimmter Reiter
> gewᅵhlt wird gibt es eine "Gleitkommadivision durch Null"
> Exception.
> Der selbe Dialog macht keine sichtbaren Probleme wenn er direkt von
> C++ aus aufgerufen wird.
Verkᅵufer fragen.
> Nun zu dem Teil, wo ich nicht weiter komme:
>
> - Wenn ich das mein Programm unter dem IDE Debugger ausfᅵhre und
> bei den Debugger Optionen die Gleitkomma Exception $C000008E
> auf "Behandelt starten" setze funktioniert der Dialog
> anstandslos (so wie bei C++)
>
> - Wenn ich die EXE ohne Debugger ausfᅵhre bleibt der modale Dialog
> an der Stelle hᅵngen und das Programm wird unbedienbar.
> Die Behandlung der Exception findet anscheinend nicht statt,
> auch wenn ich das Programm mit allem mᅵglichen Debugfunktionen,
> Bereichsᅵberprᅵfung usw. kompiliere.
Die Debug-Optionen sind nur wirksam, wenn das Programm mit Debugger
lᅵuft, nicht wenn es direkt gestartet wird.
> Hat jemand einen Tip wie ich das eventuell doch noch
> geregelt bekomme?
> (Eigener Exception handler in meinem Hauptprogramm? Andere Ideen?
> gibt es irgendwelche Compilerschalter? Import-Unit ᅵberprᅵfen?)
So wie ich das sehe wird die Exception in der DLL nicht behandelt, wie
das eigentlich der Fall sein sollte, und Application kommt damit auch
nicht zurecht, sonst wᅵrde die Standard-Behandlung mit einer MessageBox
auftauchen.
Da es sich um eine Gleitkomma-Exception handelt, kᅵnnte es helfen, das
FPU Kontrollwort zumindest wᅵhrend des Aufrufs so zu ᅵndern, daᅵ eine
Division durch Null keine Exception auslᅵst. Wie das in Delphi genau
heiᅵt, und welches Flag darin wie gesetzt werden muᅵ, kann ich aus dem
Kopf nicht sagen.
DoDi