Branimir Karadžić 2 недель назад
Родитель
Сommit
a5ce3bed94
2 измененных файлов с 19 добавлено и 8 удалено
  1. 15 4
      src/debug.cpp
  2. 4 4
      src/thread.cpp

+ 15 - 4
src/debug.cpp

@@ -1289,15 +1289,26 @@ namespace bx
 	};
 
 	typedef uint32_t (__stdcall* TopLevelExceptionFilterFn)(ExceptionPointers* _exceptionInfo);
-
-	extern "C" __declspec(dllimport) TopLevelExceptionFilterFn __stdcall SetUnhandledExceptionFilter(TopLevelExceptionFilterFn _topLevelExceptionFilter);
+	typedef TopLevelExceptionFilterFn (__stdcall* SetUnhandledExceptionFilterFn)(TopLevelExceptionFilterFn _topLevelExceptionFilter);
 
 	struct ExceptionHandler
 	{
 		ExceptionHandler()
 		{
-			BX_TRACE("ExceptionHandler - Windows SEH");
-			SetUnhandledExceptionFilter(topLevelExceptionFilter);
+			void* kernel32Dll = bx::dlopen("kernel32.dll");
+
+			if (NULL != kernel32Dll)
+			{
+				SetUnhandledExceptionFilterFn setUnhandledExceptionFilter = bx::dlsym<SetUnhandledExceptionFilterFn>(kernel32Dll, "SetUnhandledExceptionFilter");
+
+				if (NULL != setUnhandledExceptionFilter)
+				{
+					BX_TRACE("ExceptionHandler - Windows SEH");
+					setUnhandledExceptionFilter(topLevelExceptionFilter);
+				}
+
+				bx::dlclose(kernel32Dll);
+			}
 		}
 
 		static uint32_t __stdcall topLevelExceptionFilter(ExceptionPointers* _info)

+ 4 - 4
src/thread.cpp

@@ -234,17 +234,17 @@ namespace bx
 #elif BX_PLATFORM_LINUX
 		prctl(PR_SET_NAME, m_name.getCPtr(), 0, 0, 0);
 #elif BX_PLATFORM_WINDOWS
-		typedef HRESULT (WINAPI *SetThreadDescriptionProc)(HANDLE, PCWSTR);
-		SetThreadDescriptionProc SetThreadDescription = dlsym<SetThreadDescriptionProc>( (void*)GetModuleHandleA("Kernel32.dll"), "SetThreadDescription");
+		typedef HRESULT (WINAPI *SetThreadDescriptionFn)(HANDLE, PCWSTR);
+		SetThreadDescriptionFn setThreadDescription = dlsym<SetThreadDescriptionFn>( (void*)GetModuleHandleA("kernel32.dll"), "SetThreadDescription");
 
-		if (NULL != SetThreadDescription)
+		if (NULL != setThreadDescription)
 		{
 			const uint32_t length = m_name.getLength();
 			const uint32_t max    = (length+1)*sizeof(wchar_t);
 			wchar_t* name = (wchar_t*)BX_STACK_ALLOC(max);
 			mbstowcs(name, m_name.getCPtr(), length);
 			name[length] = 0;
-			SetThreadDescription(ti->m_handle, name);
+			setThreadDescription(ti->m_handle, name);
 		}
 		else
 		{