我正在谈论win32 dlls,那些普通的pe文件。在与我在explorer.exe进程中看到的内容进行比较后,我感到困惑。
以下是我的测试模块(C++): 1. DLLLoader.exe链接到同一文件夹中的A.dll。 2. B.dll链接到另一个文件夹中的A.dll(2)。(A.dll(2)是一个完全不同的DLL,但名称相同) 3. DLLLoader.exe将通过::LoadLibrary显式加载B.dll。 现在我启动DllLoader.exe,首先加载A.dll,但当它尝试加载B.dll时,它就失败了:我怀疑这是因为B.dll认为A.dll已经加载到进程中,但实际上加载的不是B.dll想要的那个,导入/导出表无法匹配,因此B.dll无法加载。 这似乎告诉我们,在同一进程中不能加载两个名称相同的dll,即使它们的路径不同。
但是,当我使用进程资源管理器监视Windows的explorer.exe进程中加载的模块时,我可以看到以下两个具有相同名称的dll被加载: comctl32.dll 用户体验控件库 C:\WINDOWS\WinSxS...\comctl32.dll comctl32.dll 通用控件库 C:\WINDOWS\system32\comctl32.dll
请问有人能给我一些指导吗?
以下是我的测试模块(C++): 1. DLLLoader.exe链接到同一文件夹中的A.dll。 2. B.dll链接到另一个文件夹中的A.dll(2)。(A.dll(2)是一个完全不同的DLL,但名称相同) 3. DLLLoader.exe将通过::LoadLibrary显式加载B.dll。 现在我启动DllLoader.exe,首先加载A.dll,但当它尝试加载B.dll时,它就失败了:我怀疑这是因为B.dll认为A.dll已经加载到进程中,但实际上加载的不是B.dll想要的那个,导入/导出表无法匹配,因此B.dll无法加载。 这似乎告诉我们,在同一进程中不能加载两个名称相同的dll,即使它们的路径不同。
但是,当我使用进程资源管理器监视Windows的explorer.exe进程中加载的模块时,我可以看到以下两个具有相同名称的dll被加载: comctl32.dll 用户体验控件库 C:\WINDOWS\WinSxS...\comctl32.dll comctl32.dll 通用控件库 C:\WINDOWS\system32\comctl32.dll
请问有人能给我一些指导吗?