mask/unmask FPU-Exceptions
-
Ich möchte beim Eintritt in meine DLL speichern, wie die Flags bezüglich FPU-Exceptions von dem aufrufenden Programm gesetzt sind und sie beim verlassen meiner DLL wieder in diesen Zustand setzen. Wie mach ich das.
Stelle die Frage hier, weil ich nicht weiß, ob ich das nach WinAPI oder Assembler stellen soll.
Hintergrund:
Wir haben einen sehr schwer nachvollziebaren Fehler in Verbindung mit Java->JNI-DLL->Windows-DLL.
Die Java-Applikation stürt kaum nachvollziehbar ab, obwohl die Window-DLL korrekt verlassen wurde. In der JNI-DLL scheint der Fehler auch nicht zu liegen, auf Java-Seite genausowenig. Also irgendwo dazwischen (vermutlich zwischen JNI-DLL und Windows-DLL)
Beim googlen bin ich darauf gestoßen, dass es öfter ähnliche Probleme in Verbindung mit DLLs von verschiedenen Compilern gibt, die daran liegen, dass die eine DLL irgendwelche FPU-Exceptions unmasked, die in der anderen DLL gemasked sein sollen.
Bei unserem Problem ist die JNI-DLL mit VC6, die Windows-DLL mit dem CBuilder 5 implementiert.
Ich lese auch, dass es nichts ungewöhnliches ist, dass eine DLL diese Flags setzt und wieder zurücksetzt. Leider find ich nirgends Code, aus dem ich ersehen kann, wie man das macht.
Meine Ahnung von Assembler geht gegen 0.
-
ich verschieb das erstmal nach Assembler, weil dir dort erklärt werden kann, wie du die FPU Register sicherst, für dein Problem kannst du dann zu not weiter verschoben werden.
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Assembler verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Habs rausgefunden. Brauch auch kein Assembler und kein WinAPI sondern _controlfp() welches compilerspezifisch ist, aber sowohl beim VC als auch beim BCB existiert.
Danke!
-
eine einfache funktion, die die exceptions löscht und gegenbenenfalls nach wunsch maskiert wär auch kein problem gewesen - aber so it's wohl besser