【问题标题】:VBA cannot find specific dllVBA 找不到特定的 dll
【发布时间】:2019-07-19 13:35:25
【问题描述】:

我正在尝试将 dll 链接到 vba 项目,但我要疯了,因为即使我 100% 确定路径(我从确切位置粘贴了 100 倍的路径),它也无法找到它。

我打过电话

Private Declare Function IMB_connect _
    Lib "C:\Users\Andrea.GIORDANO\Desktop\API\bin_dynamic\API.dll" _
                    (ByVal n As String) As Long

但它继续返回错误 53:找不到文件。

我不明白看起来如此愚蠢的问题会是什么...... 我尝试了各种斜线'\','\','/','//':没有成功。

仅供参考,我在一个 c++ 项目中链接了完全相同的 dll,在这种情况下运行良好,所以我相信 dll 本身很好......

【问题讨论】:

  • 我相信你缺少一些 dll 的依赖。为什么这适用于 c++?您可能有不同的工作目录。
  • 只是为了确保我已经硬编码了相同的路径。它有效..我如何寻找和明确的依赖关系?我想所有这些文件都在同一个目录中。
  • exe的工作目录是windows默认查找依赖项的地方。使用Dependency Walker检查其他dll依赖项。
  • 我注意到将库放在 System32 文件夹中它运行完美。可能是哪个原因?

标签: vba dll


【解决方案1】:

您的 dll 可能依赖于其他 dll。您可以使用Dependency Walker 获取相关dll 的完整列表。 依赖的 dll 必须位于以下之一(来自msdn):

  1. 加载应用程序的目录。
  2. 系统目录。使用 GetSystemDirectory 函数获取 该目录的路径。
  3. 16 位系统目录。没有函数可以获取 此目录的路径,但会被搜索到。
  4. Windows 目录。使用 GetWindowsDirectory 函数获取 此目录的路径。
  5. 当前目录。
  6. PATH 环境变量中列出的目录。 请注意,这不包括指定的每个应用程序路径 通过 App Paths 注册表项。 App Paths 键在以下情况下不使用 计算 DLL 搜索路径。

如果您正在运行 VBA 项目,Excel.exe 可能正在加载您的代码。这意味着您的 API.dll 的依赖 dll 必须位于上面引用的目录之一中。 请注意,将 dll 放在系统目录中可能会影响系统中其他应用程序的功能。 (read about dll hell).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2017-10-22
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多