2012-05-10 63 views
0

我的程序使用LoadLibrary动态地加载了一些DLL,并且(在字面上所有机器上)这些加载成功,在一台机器上这些DLL的某些内容不会被加载。我添加了跟踪lasterror的代码,并报告“0x43找不到网络名称”。LoadLibrary失败,出现lasterror 0x43无法找到网络名称

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

我也尝试将DLL(其中包括路径)的名称转换为短文件名,并在调用LoadLibrary中使用它,我仍然有同样的错误。

任何想法?

// * eggbox

+1

LoadLibrary有一个[复杂的搜索路径算法](http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx),可能无效的网络路径已经结束了搜索路径? – Benj

+0

提供给LoadLibrary的文件名是完全限定的,例如C:\ Program Files(x86)\ MyApp \ DLLs \ AssetModule.dll或短名称版本。 – eggbox

+0

当然,但是它依赖的库呢? – Benj

回答

2

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

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

+0

感谢您的提示,我会用我的系统尝试一下,看看我能否看到与用户系统的不同。 – eggbox

+0

Procmon确实给了我一些指向无法加载依赖DLL的信息。奇怪的是,依赖DLL是在加载失败之前立即加载的。至少我现在有些事情要继续,谢谢你的帮助。 – eggbox

+0

只是为了让大家知道我发现了什么事情。客户在他们的路径声明中有一条指向网络共享的条目,例如** \\ machine \ folder \ subfolder **,它看起来像无法访问(因此是错误代码)。 **修正**是为了从他们的路径中删除条目,简单但真正令人沮丧。 – eggbox

0

在配置文件模式下通过Dependency Walker运行该程序,并让该精细工具告诉您到底发生了什么问题。

+0

我在配置文件模式下尝试了Dependency Walker,但对于x86和x64机器来说,它永远都不会加载(在我的系统上)。不错的主意。 – eggbox

+0

这不是发生错误时会发生什么吗? –

+0

大卫,我在我的开发机器上试过这种情况,通常情况下它会成功加载,并且它永远不会结束。 – eggbox

相关问题