使用来自 C# 的托管 C++ dll
Posted
技术标签:
【中文标题】使用来自 C# 的托管 C++ dll【英文标题】:Using managed C++ dll from C# 【发布时间】:2009-02-02 16:01:07 【问题描述】:我使用托管 C++ 创建了一个 dll。现在我正在尝试从 C# 中使用它。我已将对象添加到项目引用中。对象浏览器正确显示dll中的对象,对象浏览器中dll的路径与实际路径相对应。
但是,当我运行 C# 程序时,它会报错:
未处理的异常:System.IO.FileNotFoundException:指定的模块可以 找不到。 (HRESULT 异常:0x8007007E)
知道还需要做什么吗?
谢谢。
【问题讨论】:
我们可以在这里看到一些代码吗? 【参考方案1】:我认为您的托管 C++ 程序集缺少其他程序集或 dll 的引用。
【讨论】:
没错,使用的 dll 之一不在路径上。谢谢。【参考方案2】:您的托管 C++ 程序集是否有其他依赖项,包括非托管 dll?如果您引用的程序集未能加载依赖项,您将在运行时看到此错误。
【讨论】:
【参考方案3】:您是否在未安装 VS 的机器上运行发行版应用程序?
我只是问,因为我在这里遇到了类似的问题:Mixed Mode Library and CRT Dependencies - HELP
如果你向下滚动到我的答案,你会看到我所做的对我有帮助。
【讨论】:
【参考方案4】:检查 c++ 程序集是否存在于与您的 c# 程序相同的文件夹中。如果 'Copy Local' 属性设置为 true(在您的 c# 应用程序中对 c++ dll 的引用),它应该被自动复制。
如果存在 c++ dll,最可能的问题是 c++ dll 依赖于另一个无法找到的非托管 dll(即 c# 不会将这些复制到您的应用程序文件夹,因为它不知道非托管引用) .您可以在 c++ dll 上使用DependencyWalker 来检查缺少的依赖项。
另一个可能的原因是您的 MSVC 运行时 dll 有问题。查看 DependencyWalker 是否抱怨缺少 MSVCR*.dll、MSVCP*.dll 等文件。
【讨论】:
以上是关于使用来自 C# 的托管 C++ dll的主要内容,如果未能解决你的问题,请参考以下文章
本机 C++ 通过代理 C++ 托管 dll 使用 C# dll