18 #include "pi_win_proxy_loader.hpp"
21 inline namespace _V1 {
31 UINT SavedMode = SetErrorMode(SEM_FAILCRITICALERRORS);
33 if (!SetDllDirectoryA(
"")) {
34 assert(
false &&
"Failed to update DLL search path");
37 auto Result = (
void *)LoadLibraryExA(LibraryPath.c_str(), NULL, NULL);
38 (void)SetErrorMode(SavedMode);
39 if (!SetDllDirectoryA(
nullptr)) {
40 assert(
false &&
"Failed to restore DLL search path");
49 auto Result = getPreloadedPlugin(PluginPath);
55 return (
int)FreeLibrary((HMODULE)Library);
63 return (
int)FreeLibrary((HMODULE)Library);
67 return reinterpret_cast<void *
>(
68 GetProcAddress((HMODULE)Library, FunctionName.c_str()));
72 wchar_t Path[MAX_PATH];
75 DWORD Ret = GetModuleFileName(
76 reinterpret_cast<HMODULE
>(
ExeModuleHandle == Handle ? 0 : Handle), Path,
78 assert(Ret < MAX_PATH &&
"Path is longer than MAX_PATH?");
79 assert(Ret > 0 &&
"GetModuleFileName failed");
82 BOOL RetCode = PathRemoveFileSpec(Path);
83 assert(RetCode &&
"PathRemoveFileSpec failed");
86 return std::filesystem::path(Path);
90 std::vector<std::tuple<std::string, backend, void *>>
91 loadPlugins(
const std::vector<std::pair<std::string, backend>> &&PluginNames) {
92 std::vector<std::tuple<std::string, backend, void *>> LoadedPlugins;
95 for (
auto &PluginName : PluginNames) {
96 void *Library = getPreloadedPlugin(LibSYCLDir / PluginName.first);
98 std::move(PluginName.first), std::move(PluginName.second), Library));
101 return LoadedPlugins;