[Gelöst] SetThreadErrorMode via GetProcAddress aufruen
-
Hallo,
ich habe folgende Klasse:
ErrorMode::ErrorMode() : m_errorMode(0), m_SetThreadErrorMode(0) { const UINT newMode = SEM_FAILCRITICALERRORS; HINSTANCE dllHandle = LoadLibrary("kernel32"); if (dllHandle) { m_SetThreadErrorMode = SET_THREAD_ERROR_MODE(GetProcAddress(dllHandle, "SetThreadErrorMode")); if (m_SetThreadErrorMode) { if (!m_SetThreadErrorMode(newMode, &m_errorMode)) { m_SetThreadErrorMode = nullptr; } } } if (!m_SetThreadErrorMode) { m_errorMode = SetErrorMode(newMode); } } ErrorMode::~ErrorMode() { if (m_SetThreadErrorMode) { m_SetThreadErrorMode(m_errorMode, &m_errorMode); } else { SetErrorMode(m_errorMode); } }
Unter 64-Bit Windows als 64-Bit Anwendung tut diese Klasse, was sie tun soll. Als 32-Bit Anwendung hagelt es aber ständig Abstürze. Dummerweise aber nicht hier sondern an andere Stelle beim Kopieren eines std::vector<std::string>.
Das Seltsame ist, wenn ich die Funktion direkt aufrufe also statt
if (!m_SetThreadErrorMode(newMode, &m_errorMode)) {
Dieses hier verwende.
if (!SetThreadErrorMode(newMode, &m_errorMode)) {
funktioniert es auch als 32-Bit Anwendung. Nur lädt die Anwendung dann nicht unter älteren Dosen.
Hat jemand eine Idee wo ich suchen kann?
LG Martin
-
Vielen Dank, an alle, die sich Gedanken gemacht haben. Habe wohl die Lösung gefunden. Der Fehler steckte nicht in dem Code-teil, den ich gepostet hatte, sondern hier:
typedef BOOL(*SET_THREAD_ERROR_MODE)(DWORD dwNewMode, LPDWORD lpOldMode);
so hätte es gehört:
typedef BOOL(WINAPI *SET_THREAD_ERROR_MODE)(DWORD dwNewMode, LPDWORD lpOldMode);
Das sind so Scheißfehler, wo man lange sucht.