如何使C ++程序寻找DLL?

时间:2011-11-30 07:00:17

标签: c++ dll directory exe codeblocks

我希望能够将DLL存储在子文件夹中,而不会让EXE抱怨缺少DLL。如何在子文件夹中查看EXE,例如“DLL”?如果这与它有关,我的IDE是Code :: Blocks。

3 个答案:

答案 0 :(得分:2)

使用显式加载(LoadLibrary / GetProcAddress)使这项工作变得非常简单。您可以控制绑定过程,只需将完整路径传递给LoadLibrary。

对于隐式加载,您受系统的支配。虽然你可以增加PATH变量,但这非常严苛。面对将所有DLL放在可执行文件旁边或修改PATH的选择,我总是会选择前者。

还有DLL redirection的选项,但即使是微软似乎建议您将DLL放在可执行文件旁边而不是使用重定向。

答案 1 :(得分:2)

有很多方法可以通过清单或重定向来实现,但这些方法非常复杂。

我建议您使用以下结构:

myapp.exe
DLLs/
    myapp_internal.exe
    mydll1.dll
    mydll2.dll

在上面的示例中,您的真实应用程序是myapp_internal.exe,它位于DLL子文件夹中,因此可以正确定位所有DLL。 myapp.exe二进制文件只是一个执行myapp_internal.exe的存根应用程序。

我希望这有帮助!

答案 2 :(得分:0)

我实际上没有尝试过这个,但是没有理由它不起作用(着名的遗言)。

  1. 打开DLL的延迟加载。这是通过linker option or compiler #pragma.
  2. 完成的
  3. 在代码的早期(在调用任何DLL函数之前),修改进程的PATH环境变量副本以包含DLL目录。这将使进程能够找到DLL,但不会影响系统PATH变量。
  4. 如果您真的更喜欢使用LoadLibrary / GetProcAddress,请帮自己一个忙,并使用wrapper library来简化其使用。