要在不同线程中使用非可重入DLL,我将其复制到4个不同的文件夹中。丑陋但强制性的... 该DLL由我的应用程序手动加载,并使用另一个子库(与另一个子库隐式链接)。所以我有这样的东西:
folder1/
lib1.dll
sublib.dll
folder2/
lib2.dll
sublib.dll
我设法加载了lib.dll的不同版本(lib1和lib2),但是加载的sublib.dll都保持不变。 我尝试了SetDllDirectory和AddDllDirectory,但没有加载多个sublib.dll。
for (size_t i { 1 }; i <= threadsCount; ++i)
{
SetDllDirectoryA(nullptr); // Reset.
//SetDllDirectoryA(""); // Plug "binary planting" security hole. `
SetDllDirectoryA(dirPath(i).c_str()); // folderX
HMODULE module = LoadLibraryExA(libPath(i).c_str(), nullptr, LOAD_LIBRARY_SEARCH_USER_DIRS);
if (!module )
{
std::cout << "error loading dll" << std::endl;
return false;
}
// Used after
// FooPrototype foo = (FooPrototype) GetProcAddress(module, "foo");
}
// Run threads with the different 'foo'
是否可以加载sublib.dll的2个实例?
谢谢!