【问题标题】:How can I run an .exe with DLLs in separate directory?如何在单独的目录中运行带有 DLL 的 .exe?
【发布时间】:2011-04-23 18:14:14
【问题描述】:

我知道这已经在这里讨论过,但我没有找到我想要的问题,即:我有一个使用很多(超过 20 -30 个)DLL 的 C++ 应用程序。我在我的 Visual Studio 2010 项目中定义了 .exe 将被复制到 ProjectDir(这样一切都整洁清晰)但是当 .exe 单独站在 ProjectDir 中时,它无法访问存储在 bin 中的 DLL。 // 任何文件夹以及许多其他文件。

我能否以某种方式指向 DLL 文件夹,以便应用程序知道它们所在的位置? (并且<myapp>.exe.local 文件夹在我的 Windows 7 中不起作用)

【问题讨论】:

  • DLL 应与 EXE 位于同一目录中。这就是 Windows 首先出现的地方。任何其他方案都以 -1000 分开始。
  • @Hans Passant:“任何其他方案以 -1000 点开头”是什么意思。 ?
  • 有一千个理由不这样做。
  • @Hans:你能说说原因吗?为了知识而想知道。

标签: c++ visual-studio dll


【解决方案1】:

首先,无需将您的 exe 文件复制到项目目录中,无论您在调试项目时创建的 .exe 文件在何处,运行的目录都将是您的项目目录。之后,当您尝试导入 dll 时,如果您相对地查找它,windows 首先在您正在运行的目录中搜索该 dll,然后它检查是否可以在任何目录定义的系统 PATH 变量中找到该 dll,但是如果您检查对于绝对地址,将不会查找。

所以第一个技巧是将所有 dll 路径设置为绝对,这样就不会搜索并且 dll 很容易导入,但是如果你想将应用程序移动到另一台计算机会出现很多问题(例如 HINSTANCE hDLL = LoadLibrary(L"C:\\mydll.DLL"); ) .其次,您可以提供相对于运行目录的 dll 路径(不是应用程序路径,这两个可能不同),您还可以为此指定目录(例如 HINSTANCE hDLL LoadLibrary("..\\dlls\\mydll.dll")

【讨论】:

    【解决方案2】:

    您可以设置 PATH 变量。 在这里您可以找到 Windows 查找 dll 的位置:http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx 以及如何在 Windows 7 中设置路径:http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx

    【讨论】:

    • 是的,我知道这是一种我忘记提及的可能性,但我想把这个项目交给某人,然后呢?
    • 好的,我没试过,但是这个解决方案看起来不错。 codeguru.com/Cpp/W-P/dll/article.php/c99
    • user675100 - 如果您要将项目交给某人,看起来您将收集所有这些 DLL 并将它们放入他的 windows/system32 中,不是吗?
    • 尤其是使用注册表的部分
    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多