Frage

Ich habe vor kurzem einige vektorisiert Ausnahmebehandlung zu fangen Fehler in unserer Software implementiert. Dies ist besonders nützlich, da wir gerade von vc6 zu VS2005 konvertiert haben. Wir sind ein paar Probleme mit der Verwendung der STL-Bibliothek zu begegnen (in der Regel Menschen, Dinge zu tun, sollten sie nicht). Ich versuche, diese Fehler mit meinen vectored Exception-Handler zu fangen.

Allerdings scheint dies nicht genannt werden, anstatt diese Fehler intern verarbeitet werden durch die Microsoft Visual Studio C-Laufzeitbibliothek.

Meine Frage ist;

Gibt es eine Möglichkeit, die Laufzeitfehlerprüfung zu deaktivieren und die Ausnahmen von den übergebenen bekommen VE-Handler?

Danke Rich

War es hilfreich?

Lösung

http://msdn.microsoft.com /en-us/library/aa985973%28VS.80%29.aspx

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

Das oben ermöglicht es mir, Ausnahmen zu werfen.

Andere Tipps

Sie können die zusätzlichen Laufzeitprüfungen deaktivieren. Allerdings sind nicht alle Fehler dieser Fänge wird zu einem Absturz führen, die Sie abfangen können.

Auf einer Nebenbemerkung: Diese Kontrollen oft erhebliche Leistung verbrauchen und sind standardmäßig nicht ausgeschaltet in Release-Builds.

#define _SECURE_SCL 0

Es ist das am besten über Projekteinstellungen zu tun, wie Sie fiesen Linker Probleme, wenn die Einstellung unterscheidet sich innerhalb oder zwischen Dateien bekommen.

Ich lief in dieses Problem vor einer Weile und es dauerte einige Zeit, meinen Kopf herum zu wickeln, was sie in ihrer Laufzeit tun. Ich würde empfehlen, "Migration von früheren Versionen von Visual C ++" Lesen auf MSDN mindestens zweimal. Dann lesen Sie "Erweiterungen der C-Bibliothek, Teil I: Bounds-Überprüfung Schnittstellen (ISO / IEC TR 24731-1) " . Letzteres ist der Standard , dass die meisten der Parameter Sachen Überprüfung basiert auf.

Wenn Sie verstehen, was sie sind bis definieren nur _CRT_SECURE_NO_DEPRECATE, _SECURE_SCL und _SECURE_SCL_THROWS in den Projekteinstellungen. dann stellen Sie sicher, dass Sie "Enable C ++ Ausnahmen" auf "Ja mit SEH Ausnahmen (/ EHA)" und "Basic Runtime Checks" auf "Default" in Ihrem Projekt. Zumindest ist es das, was für uns jetzt funktioniert. Es dauerte einige Zeit dauern, den falschen Code zu entfernen, dass wir zwar unter VC6 geschaffen hatten.

Das Wichtigste ist, dass Sie beiseite ein paar Wochen eingestellt tun kann, ist und wirklich graben in das, was die verschiedenen Optionen und Makros tun. Dann herauszufinden, was mit Ihrem Code funktioniert. Wir haben nicht diese früh genug tun, und es tat sehr weh, wenn wir einige „schlechte baut“ machen es aus technischen hatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top