5

我使用托管 C++ 创建了一个 dll。现在我正在尝试从 C# 中使用它。我已将对象添加到项目引用中。对象浏览器正确显示dll中的对象,对象浏览器中dll的路径与实际路径相对应。

但是,当我运行 C# 程序时,它会抱怨:

未处理的异常:System.IO.FileNotFoundException:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

知道还需要做什么吗?

谢谢。

4

4 回答 4

6

我认为您的托管 C++ 程序集缺少其他程序集或 dll 的引用。

于 2009-02-02T16:02:49.717 回答
0

您的托管 C++ 程序集是否有其他依赖项,包括非托管 dll?如果您引用的程序集未能加载依赖项,您将在运行时看到此错误。

于 2009-02-02T16:04:45.670 回答
0

您是否在未安装 VS 的机器上运行发布版本的应用程序?

我只是问,因为我在这里遇到了类似的问题:混合模式库和 CRT 依赖项 - 帮助

如果您向下滚动到我的答案,您会看到我所做的对我有帮助。

于 2009-02-02T16:07:34.713 回答
0

检查 c++ 程序集是否存在于与 c# 程序相同的文件夹中。如果“Copy Local”属性设置为 true(在您的 c# 应用程序中对 c++ dll 的引用),它应该被自动复制。

如果存在 c++ dll,最可能的问题是 c++ dll 依赖于另一个无法找到的非托管 dll(即 c# 不会将这些复制到您的应用程序文件夹,因为它不知道非托管引用)。您可以在 c++ dll 上使用DependencyWalker来检查缺少的依赖项。

另一个可能的原因可能是您的 MSVC 运行时 dll 有问题。查看 DependencyWalker 是否抱怨缺少 MSVCR*.dll、MSVCP*.dll 等...文件。

于 2011-08-17T12:08:04.503 回答