10

I have c++ dll using in my c# project, It ran fine on my window xp machine, but when i copy my debug project on window 2003 server (x64), i received error below, can any one tell me what is this problem, and how can i fix it.

Thanks

"System.DllNotFoundException: Unable to load DLL 'lib.dll': This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem"

4

5 回答 5

13

它抱怨它无法找到 CRT dll。首先检查 DLL 是否包含所需的清单。在 Visual Studio 中,File + Open + File,选择 DLL 并验证它是否包含 RT_MANIFEST 节点。下一个问题是您无法部署 DLL 的调试版本。它将依赖于 CRT 的调试版本,您无法在目标机器上安装它。

部署 DLL 的发布版本或使用 /MT 选项编译 DLL,以便 CRT 静态链接。项目 + 属性、C/C++、代码生成、运行时库。如果 DLL 是使用 /clr 选项编译的,这将不起作用。

于 2010-01-19T13:19:24.047 回答
7

对于 DLL 加载问题,我建议您使用Dependency Walker工具。事实证明,它在处理此类问题时很有价值,因为它会向您显示确切的问题。

如果您拥有 Visual Studio 2005,则可以在C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe.

更新:

MSVCR90D.DLL是 Visual C++ 运行时 9.0 的调试版本。它只能用于调试目的。我强烈建议构建您的库的发布版本以避免 DLL 加载问题。但是,如果您绝对需要部署调试版本,您会在C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

于 2010-01-19T13:03:12.103 回答
4

听起来你还没有在目标机器上安装 Visual C++ 运行时。你可以从这里安装它似乎正在使用这些 dll 的调试版本,也许你还需要先在发布模式下构建你的应用程序? 这篇文章这篇文章还有一些其他建议可能会有所帮助......

于 2010-01-19T18:52:34.000 回答
3

lib.dll 是 32 位 DLL 吗?您的 C# 程序将在 x64 上本机运行,但无法加载 32 位 DLL。您可以尝试将 C# 项目的目标 CPU 更改为“x86”以强制其在 WOW64 下运行。

于 2010-01-19T19:39:49.510 回答
0

我发现当操作系统需要更新时,一些 dll-s 会被冻结。只需检查挂起的更新、安装它们和/或重新启动 Windows。

之后冻结的 dll-s 被释放并且问题消失了。

于 2021-06-08T19:07:17.460 回答