我使用托管 C++ 创建了一个 dll。现在我正在尝试从 C# 中使用它。我已将对象添加到项目引用中。对象浏览器正确显示dll中的对象,对象浏览器中dll的路径与实际路径相对应。
但是,当我运行 C# 程序时,它会抱怨:
未处理的异常:System.IO.FileNotFoundException:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)
知道还需要做什么吗?
谢谢。
我认为您的托管 C++ 程序集缺少其他程序集或 dll 的引用。
您的托管 C++ 程序集是否有其他依赖项,包括非托管 dll?如果您引用的程序集未能加载依赖项,您将在运行时看到此错误。
检查 c++ 程序集是否存在于与 c# 程序相同的文件夹中。如果“Copy Local”属性设置为 true(在您的 c# 应用程序中对 c++ dll 的引用),它应该被自动复制。
如果存在 c++ dll,最可能的问题是 c++ dll 依赖于另一个无法找到的非托管 dll(即 c# 不会将这些复制到您的应用程序文件夹,因为它不知道非托管引用)。您可以在 c++ dll 上使用DependencyWalker来检查缺少的依赖项。
另一个可能的原因可能是您的 MSVC 运行时 dll 有问题。查看 DependencyWalker 是否抱怨缺少 MSVCR*.dll、MSVCP*.dll 等...文件。