/* --- functions --- */ static gpointer _g_module_open (const gchar *file_name, gboolean bind_lazy, gboolean bind_local) { HINSTANCE handle; wchar_t *wfilename; DWORD old_mode; BOOL success; #ifdef G_WITH_CYGWIN gchar tmp[MAX_PATH]; cygwin_conv_to_win32_path(file_name, tmp); file_name = tmp; #endif wfilename = g_utf8_to_utf16 (file_name, -1, NULL, NULL, NULL); /* suppress error dialog */ success = SetThreadErrorMode (SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS, &old_mode); if (!success) set_error (""); handle = LoadLibraryW (wfilename); if (success) SetThreadErrorMode (old_mode, NULL); g_free (wfilename); if (!handle) set_error ("'%s': ", file_name); return handle; }
void setTopLevelExceptionHandlerEnabled(bool enabled) { if (!topLevelExceptionHandlerEnabled && enabled) { old_terminate = std::set_terminate(stanfordCppLibTerminateHandler); #ifdef _WIN32 // disabling this code for now because it messes with the // newly added uncaught signal handler // SetErrorMode(SEM_NOGPFAULTERRORBOX); SetErrorMode(SEM_FAILCRITICALERRORS); SetThreadErrorMode(SEM_FAILCRITICALERRORS, NULL); SetUnhandledExceptionFilter(UnhandledException); // _invalid_parameter_handler newHandler; // newHandler = myInvalidParameterHandler; // _set_invalid_parameter_handler(newHandler); //_set_error_mode(_OUT_TO_STDERR); #endif // _WIN32 // also set up a signal handler for things like segfaults / null-pointer-dereferences signalHandlerEnable(); } else if (topLevelExceptionHandlerEnabled && !enabled) { std::set_terminate(old_terminate); } topLevelExceptionHandlerEnabled = enabled; }