LoadLibrary 失败并显示 lasterror 0x43 找不到网络名称

Posted

技术标签:

【中文标题】LoadLibrary 失败并显示 lasterror 0x43 找不到网络名称【英文标题】:LoadLibrary fails with lasterror 0x43 The network name cannot be found 【发布时间】:2012-05-10 20:05:57 【问题描述】:

我的程序使用 LoadLibrary 动态加载许多 DLL,并且(实际上在所有机器上)这些 DLL 成功加载,在一台机器上,其中一些 DLL 没有被加载。我添加了跟踪 lasterror 的代码,这报告“0x43 找不到网络名称。”。

有问题的机器运行的是 Windows 7 Enterprise x64,DLL 是 32 位 DLL,这应该不是问题,(事实上)这是我的开发环境。

我还尝试将 DLL 的名称(包括路径)转换为短文件名,并在调用 LoadLibrary 时使用它,但仍然遇到同样的错误。

有什么想法吗?

//*蛋盒

【问题讨论】:

LoadLibrary 有一个complicated search path algorithm,无效的网络路径是否会出现在搜索路径上? 提供给 LoadLibrary 的文件名是完全限定的,例如C:\Program Files (x86)\MyApp\DLLs\AssetModule.dll,或简称版本。 当然,但是它所依赖的库呢? 好点,下面的答案让我知道我可以使用什么。 【参考方案1】:

下载Procmon 让它运行并过滤你的dll名称。这将立即为您提供搜索 dll 的位置以及返回 0x43 的访问路径。

如果您的代码也有 pdb(只有 C/C++,没有托管代码),您甚至可以获得调用堆栈。

【讨论】:

感谢您的提示,我将在我的系统上尝试一下,看看我是否能看到与用户系统的差异。 Procmon 确实给了我一些信息,这些信息表明无法加载依赖的 DLL。奇怪的是,依赖 DLL 是在加载失败之前立即加载的。至少我现在有事情要做,谢谢你的帮助。 只是为了让大家知道我发现了发生了什么。客户在其路径语句中有一个条目指向网络共享,例如 \\machine\folder\subfolder,看起来这是不可访问的(因此出现错误代码)。 修复是从他们的路径中删除条目,确实很简单但令人沮丧。【参考方案2】:

在 Profile 模式下通过Dependency Walker 运行程序,并让这个出色的工具准确地告诉您出了什么问题。

【讨论】:

我在 Profile 模式下尝试了 Dependency Walker,但对于 x86 和 x64 机器,它从未到达加载结束(在我的系统上)。好主意。 大卫,我在我的开发机器上试过这个,通常它会成功加载,但永远不会结束。

以上是关于LoadLibrary 失败并显示 lasterror 0x43 找不到网络名称的主要内容,如果未能解决你的问题,请参考以下文章

开始 运行输入regsvr32 quartz.dll显示LoadLibrary( quartz.dll" )失败 找不到指定的模块

应用加载失败(loadlibrary失败 ,)应该怎么解决

LoadLibrary 失败的解决

VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)

LoadLibrary 失败,错误代码为 14001

LoadLibrary加载动态库失败