Я пытаюсь динамически загрузить DLL (python3.dll), которая не находится на обычном пути поиска.Я могу загрузить его с измененным путем поиска, но когда я выполняю GetProcAddress
, он не работает (потому что функция, которую я загружаю, пересылается в другую DLL, python37.dll).
Я думаю, что мне нужносделать, это заставить GetProcAddress
следовать той же логике поиска, что и в моей исходной загрузке DLL, но я не знаю, как это сделать, не изменяя систему PATH
(которая имеет все другие потенциальные проблемы, как и мой кодчтобы позволить пользователю запускать свой собственный код, которому нужен оригинальный путь).
Есть ли для этого чистое решение?
Вот код, который я пробовал:
HMODULE py_dll = LoadLibraryW(L"python3.dll");
if (!py_dll) {
py_dll = LoadLibraryExW(L"C:\\Work\\Projects\\pylaunch\\py3embed\\python3.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
}
if (!py_dll) {
printf("Cannot load Python DLL\n");
err();
return 1;
}
char buf[1000];
GetModuleFileName(py_dll, buf, 1000);
printf("DLL is %s\n", buf);
Py_Main_t Py_Main = (Py_Main_t)GetProcAddress(py_dll, "Py_Main");
if (!Py_Main) {
printf("Cannot load Py_Main\n");
err();
return 1;
}
Добавление SetDllDirectory()
, похоже, не помогло, но я просто выбросил вызов в код, так как я не был на 100% уверен в том, как это работает, так что, возможно, я что-то сделалнеправильно.
Для справки, определение символа Py_Main:
747 2EA Py_Main (forwarded to python37.Py_Main)