PInvoke-找不到指定的模块.如何检查缺少的依赖项
PInvoke - Specified module could not be found. How to check for missing dependencies?
我有一个.Net应用程序,它依赖于一个名为Procarper.dll的非托管dll。当我在我的个人计算机上运行它时,该应用程序运行得非常好。
当我将同一应用程序复制到我的服务器(Windows 2008)并尝试在那里运行时,它失败了,并显示以下错误消息。
我之所以使用实际的应用程序进行测试,是因为它最初在我的WCF服务中失败了。
System.DllNotFoundException:无法加载DLL"C:\Warper\Procarper.dll":找不到指定的模块。(HRESULT:0x8007007E的异常)
PInvoke签名如下(我将路径硬编码为测试……它通常只是相对的):
[DllImport(@"C:WarperProcarper.dll", EntryPoint = "CreateProcr", CallingConvention = CallingConvention.Cdecl)]
private static extern int CreateProcr(int width, int height, int scanWidth, int bpp, IntPtr rawData);
我正在研究dependencywalker,但老实说,我不知道如何真正判断它告诉我的是什么,我已经很久没有使用C++了。
根据以上信息,有人能帮助我确定什么是失败的吗?
我很乐意提供更多信息,请询问,我会提供。
因此,如果有人遇到类似的情况,希望我的经验能有所帮助。
以下是我解决问题的方法。(提示:在出现问题的计算机上安装DependencyWalker,并遍历出现问题的.dll。Dependency沃克将以红色显示丢失的依赖项或目标CPU不匹配)。
-
我知道应用程序在A电脑上运行。我知道同样的应用程序在B电脑上失败了。
-
错误消息为"找不到指定的模块"。我专注于实际的.dll.
-
在现实中,错误与找不到.dll无关。相反,它找不到Procwarper.dll所依赖的依赖项。在这种情况下,即:
MSVCP120D.DLL和MSVCR120D.DLL
-
为了确定#3,我使用了dependencywalker(www.dependencywaller.com)。由于我知道.dll是32位的,所以我安装了32位版本的dependencywalker。
-
我将Procwarper.dll加载到计算机A(应用程序工作的计算机)上的dependencywalker中。Dependencywalker没有表现出任何问题。
-
我将dependencywalker加载到计算机B上(应用程序出现故障)。DependencyWalker显示了两个缺失的依赖项(上面显示的两个)。
-
我把那些从计算机A的windows\System32文件夹复制到计算机B的应用程序文件夹
-
我是一个依赖行者。现在它显示了现在丢失的依赖项,但我仍然有一个错误,因为System32中的.dll是64位的。
-
我快速搜索了一下,发现SysWow64文件夹中有32位版本的System32 dll。
-
我把这两个复制到B电脑上,一切都正常了。复制到APP文件夹
难以置信。现在我知道他们为什么把它称为".dll地狱"了。
希望这能帮助到别人。
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 如何从C++中的依赖类型中获得它所依赖的类型
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- 检查是否存在模板方法,而不依赖自动模板扣除
- 检查依赖关系的深度有多深
- 如何检查两个 n 大小的向量是否线性依赖于C++
- 如何检查给定文件是否存在依赖项错误
- 如何检查哪些项目依赖于.cpp文件
- 如何检查浮动的依赖关系
- PInvoke-找不到指定的模块.如何检查缺少的依赖项
- 当函数依赖于两个不同的类时,避免进行类型检查
- 用于检查 R 函数是否依赖于 C/C++ 编译代码的函数