win32_dlfcn: Support WinRT/UWP.
authorMatt Oliver <protogonoi@gmail.com>
Sat, 1 Jul 2017 13:16:42 +0000 (23:16 +1000)
committerMatt Oliver <protogonoi@gmail.com>
Sun, 30 Jul 2017 04:30:43 +0000 (14:30 +1000)
This only enables dlls that are packaged with the application to be
loaded. Due to the limitations of WinRT/UWP it is not allowed to load
external/system dlls so this cannot be used as a complete replacement
for normal win32 dll loading.

Signed-off-by: Matt Oliver <protogonoi@gmail.com>
compat/w32dlfcn.h

index bc9bb8c..78cc8f4 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifdef _WIN32
 #include <windows.h>
-#if _WIN32_WINNT < 0x0602
+#if (_WIN32_WINNT < 0x0602) || HAVE_WINRT
 #include "libavutil/wchar_filename.h"
 #endif
 /**
@@ -71,7 +71,17 @@ exit:
 #ifndef LOAD_LIBRARY_SEARCH_SYSTEM32
 #   define LOAD_LIBRARY_SEARCH_SYSTEM32        0x00000800
 #endif
+#if HAVE_WINRT
+    wchar_t *name_w = NULL;
+    int ret;
+    if (utf8towchar(name, &name_w))
+        return NULL;
+    ret = LoadPackagedLibrary(name_w, 0);
+    av_free(name_w);
+    return ret;
+#else
     return LoadLibraryExA(name, NULL, LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32);
+#endif
 }
 #define dlopen(name, flags) win32_dlopen(name)
 #define dlclose FreeLibrary