使用C#中的托管C ++ dll

时间:2009-02-02 16:01:08

标签: c# .net c++ managed

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

然而,当我运行C#程序时,它会抱怨:

  

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

知道还有什么必须做的吗?

感谢。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您是否在没有安装VS的计算机上运行应用程序?

我只是问,因为我在这里遇到了类似的问题:Mixed Mode Library and CRT Dependencies - HELP

如果你向下滚动到我的答案,你可以看到我做了什么帮助了我。

答案 3 :(得分:0)

检查c ++程序集与c#程序位于同一文件夹中。如果'Copy Local'属性设置为true(在c#app中对c ++ dll的引用),则应自动复制它。

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

另一个可能的问题可能是您的MSVC运行时dll存在问题。看看DependencyWalker是否抱怨缺少MSVCR * .dll,MSVCP * .dll等文件。