2

当我使用VS2008构建我的项目时,我使用自己的DLL. 它在release模式下可以正常工作,但是当我将其更改为debug模式时,出现错误:

An unhandled exception of type 'System.DllNotFoundException' occurred in DDKWidget.exe

附加信息Unable to load the DLL "DDKLibA.dll": The specified module could not be found.

DDKWidgetand是我的DDKLibA.dll项目可执行文件和我自己创建的DLL. 我创建了我DLL的 in C++,但我在我的C#项目中使用它,使用[DllImport("DDKLibA.dll")].

OS的是Win7 64 bit
IDE的是VS2008 SP1

有没有人遇到过这个?
顺便说一句,前段时间一切都好,但最近,自从我重新安装了我的OS,我开始收到这些错误。谁能帮我?

4

3 回答 3

1

这听起来像是 64 位与 32 位不匹配的问题。CLR 应用程序默认编译为“AnyCPU”,这意味着它们将在 64 位操作系统上自动作为 64 位进程运行。

另一方面,C++ dll 必须编译为 32 位或 64 位,并且一旦编译它们就会保持这种状态。

即使在 64 位操作系统下,您也可以强制 C# 应用程序在 32 位模式下运行,但可以针对调试和发布配置单独更改该设置。

我的猜测是您的 C++ dll 编译为 32 位,并且您的 C# dll 的调试设置也是 32 位,但在发布模式下它设置为 AnyCPU。这样,它将作为 64 位进程运行,并且无法加载 32 位 C++ dll。

于 2012-09-18T02:34:34.560 回答
0

我见过这种情况的唯一一次是缺少依赖 DLL 时。例如,您的程序集的发布版本依赖于 foo.dll,但调试版本依赖于 foo-debug.dll。如果目标系统上未安装 foo-debug.dll,则无法加载程序集的调试版本。

我建议您使用文件监控实用程序(例如FileMon)来查看操作系统在加载 DLL 时尝试加载哪些文件。

于 2012-09-18T02:26:51.317 回答
0

dll位于文件系统的哪个位置?也许您将它复制到与发布 exe 相同的目录,但忘记对调试 exe 执行相同操作?

于 2012-09-18T02:23:50.110 回答