2

我有一个使用非 activeX DLL(非注册)的 VB6 应用程序。

它是通过经典Public Declare Function "Function Name" Lib "Library.DLL"语法声明的。

在我的开发机器 (XP) 上它工作正常,但是当我部署到 Vista 或 Win7 时,我经常收到运行时错误 48 - 找不到相关 DLL 的文件。

我尝试将该 DLL 复制到我能想到的每个目录,包括测试机器上的每个环境路径和应用程序路径。

这些都是 32 位测试环境,因此不是 SysWow64 问题。

有问题的应用程序是 Outlook COM 插件,这可能是一个问题。

我设法在 Win7 上安装了 VB6,并且能够运行一个利用这个 DLL(在 Outlook 进程之外)的小型示例应用程序,所以我知道它可以工作,前提是 DLL 位于应用程序路径中。如果我App.Path在测试环境中运行它时从我的 DLL 中调用它,毫无疑问,我的安装目录会显示,但是 DLL 在那里。

我尝试关闭 UAC。我尝试使App.Path目录权限对所有人开放,但仍然没有骰子。

4

3 回答 3

1

根据您提供的详细信息,将 DLL 放置在标准加载项位置的路径中似乎会有所帮助。

于 2012-07-03T07:20:41.783 回答
1

我相信 DLL 搜索首先查找的是加载 EXE 的目录,因此不会使用您的 DLL 的 App.Path。

您确定您尝试将此 DLL 安装到 System32 中吗?进入Windows?

除此之外,您应该能够为调用代码(如果我在关注您,则为 VB6)创建一个 PATH(混乱)或隔离清单,指定 DLL 重定向到相对路径(即带有您的 VB6 代码的文件夹下的子文件夹在里面)。

请参阅动态链接库搜索顺序

于 2012-07-03T14:15:06.140 回答
0

您可能需要检查 DLL 自身的依赖关系。如果它无法加载有问题的 DLL 或依赖链深处的某些 DLL 20 级别,您将收到相同的错误。

于 2012-07-03T09:16:27.497 回答