依赖于其他DLL的DLL?

时间:2013-04-24 02:07:57

标签: c++ deployment

静态链接不是一种选择。

假设我有一个依赖于DLL的可执行文件。一种解决方案是将DLL与可执行文件放在同一文件夹中。现在让我们说我需要将一个DLL注入一个依赖于DLL的进程。因为注入了DLL,我将把它依赖的DLL放在哪里?在同一个文件夹中?或者在注入?

的进程的目录中

1 个答案:

答案 0 :(得分:5)

依赖于一个或多个其他DLL的DLL并不是特别的。即使是一个普通的DLL也会依赖于驻留在其他DLL中的Windows共享组件。这些“共享组件”的一个很好的例子是Kernel32.dll和CRT DLL,例如MSVCR80.DLL等。

通过调用Dependency Walker,您可以准确找到DLL或EXE所需的其他DLL。为此,只需从Visual Studio命令提示符运行depends.exe,然后将感兴趣的DLL拖放到出现的窗口中。如果您没有可用的依赖者walker,可以从上面的链接下载它。

我不确定DLL注入的东西,但是如果将所有(其他DLL)依赖项放在与DLL相同的文件夹中,通常应该足够了,这将是EXE加载这些DLL的文件夹驻留。

例如:如果C:\test\foo.exe需要bar.dll(反过来需要baz.dll,假设baz.dll不是标准的Windows共享组件),那么您将bar.dll放置baz.dllC:\test中有1}}和{{1}}。

操作系统如何确定要加载哪个DLL还有很多,因为在不同的位置可能存在同一DLL的多个版本,并且MSDN对动态链接库的搜索顺序有一个有用的article。 / p>