1
5
我认为你最有希望的选择是大声向销售互不兼容产品的供应商投诉。这与DLL的想法相反。 你不能把DLL放在不同的目录中。加载具有给定名称的DLL后,加载具有相同模块名称的另一个DLL的所有其他尝试都将使用已加载的DLL,即使路径不同。
|
2
5
我也有类似的问题。具体来说,我想使用一个Python解释器中的PyQt,该解释器嵌入在使用不兼容版本的Qt的应用程序中。主应用程序使用了两个Qt dll:QtCore.dll和QtGui.dll。 当我从嵌入式Python解释器加载PyQt时,我会得到一个错误:
这发生在以下行:
问题在于,一旦不兼容的QtGui.dll加载到主应用程序的进程空间中,对QtGui.dll的任何引用(例如,从文件QtGui.pyd)都是不正确的。 接下来发生了什么,我并不自豪。
由于激发了这个可怕的故事,其他人应该受到表扬(或责备)。 |
3
4
正如其他人提到的,您可以重命名VendorLibUtils的一个副本,并修改关联VendorLib DLL的导入表以链接到它,而不是创建它时使用的VendorLibUtils.DLL。 有一些工具可以让您以这种方式编辑EXE/DLL文件。 CFF Explorer
当然,这假设VendorLib使用导入表来访问VendorLibUtils,但它可能不使用
实际上,如果VendorLib确实使用导入表,但是
而且
使用
|
4
3
|
5
2
我不是DLL方面的专家,但我认为唯一可行的方法是使用
和
|
6
1
您的意思是,您的情况与MSVCRT80.DLL和MSVCRT90.DLL类似?微软对这些DLL进行编号有一个很好的理由。如果这两个DLL都被称为MSVCRT.DLL,那么在单个进程中只能加载其中一个DLL。 |
7
0
实际上,可以将不同版本的dll隐式加载到单个进程中。
如果它们已经包含清单(可能链接到VS2005或VS2008 C-Runtime),则使用MT.EXE工具合并到新的依赖项中。 |
Guilherme Albertini · DLL中的类 6 年前 |
Naomi · C#dll资源文件更改语言 6 年前 |
AidanH · C#DLL语言翻译实现[关闭] 6 年前 |
subham · DLL函数调用不工作 6 年前 |
PixelThis · 为什么我的DLL要求我的程序有一个特定的名称? 6 年前 |
nemo · DLL的“好”调用约定是什么? 6 年前 |