SetDllDirectory通过线程

时间:2019-02-20 14:56:39

标签: c++ windows multithreading dll

要在不同线程中使用非可重入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个实例?

谢谢!

0 个答案:

没有答案