Browse Source

libobs/util: Use FormatMessage on error when LoadLibrary fails

Outputting a human-readable error message on library load failure makes
it a little bit easier for plugin developers to determine why a plugin
library may have failed to load (such as missing dependency), rather
than having to look up the error code each time.

Closes jp9000/obs-studio#596
Colin Edwards 9 years ago
parent
commit
0c0f6031e2
1 changed files with 18 additions and 3 deletions
  1. 18 3
      libobs/util/platform-windows.c

+ 18 - 3
libobs/util/platform-windows.c

@@ -84,9 +84,24 @@ void *os_dlopen(const char *path)
 	if (wpath_slash)
 		SetDllDirectoryW(NULL);
 
-	if (!h_library)
-		blog(LOG_INFO, "LoadLibrary failed for '%s', error: %ld",
-				path, GetLastError());
+	if (!h_library) {
+		DWORD error = GetLastError();
+		char *message = NULL;
+
+		FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
+		               FORMAT_MESSAGE_IGNORE_INSERTS |
+		               FORMAT_MESSAGE_ALLOCATE_BUFFER,
+		               NULL, error,
+		               MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
+		               (LPSTR)&message, 0, NULL);
+
+		blog(LOG_INFO, "LoadLibrary failed for '%s': %s (%lu)",
+				path, message, error);
+
+		if (message)
+			LocalFree(message);
+	}
+
 
 	return h_library;
 }