c# - 从 C# .NET Windows 应用程序调用 C++ dll 时出现运行时错误

标签 c# .net c++ exception dll

我有一个具有 C# 用户界面的 C# .NET Windows 应用程序,所有处理背后的代码都是通过调用 C++ dll(C++ 类库项目)来完成的,该DLL 作为对 C# 项目的引用添加。

但是最近,当我格式化计算机并再次尝试运行已备份的项目时,在 Visual Studio 2005 中出现以下异常:


System.Windows.Forms.dll 中发生“System.IO.FileNotFoundException”类型的未处理异常

附加信息:找不到指定的模块。 (HRESULT 异常:0x8007007E)


当我将以下代码(例如)放入按钮单击事件中时,会引发此异常。

    private void button3_Click(object sender, EventArgs e)
    {
        CyclopiaDll.Class1 cc = new CyclopiaDll.Class1(); // calling dll 
        cc.clearData();            
    }

然而,即使表单加载没有问题,实际上也会在这一行中抛出异常:

  Application.Run(new Form1());

我尝试构建新项目并再次添加引用的 dll,但仍然遇到异常。 当我尝试在另一台计算机上运行该项目时,这种情况也发生在我身上。然而,在我的机器格式化后,我什至无法运行该应用程序。

我能想到解决这个问题的唯一方法是像以前一样从头开始重新创建项目。这很耗时。

有没有办法避免这个问题,以便我可以在我的计算机和另一台计算机上运行这个项目?

最佳答案

听起来您缺少依赖项,即您的 C++ dll 所依赖的另一个 dll,但您的计算机上不存在该依赖项。

您可以使用“Dependency Walker”之类的实用程序在出现问题的计算机上加载 C++ dll,它会指出任何缺少的依赖项。然后,需要确定此依赖项是什么(例如缺少 C++ 运行时版本),然后确保将其直接或通过合并模块(如果合适)与您的应用程序打包在一起。

依赖步行者:http://www.dependencywalker.com/

关于c# - 从 C# .NET Windows 应用程序调用 C++ dll 时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989173/

相关文章:

c# - Request.Form 提供来自动态文本框的额外值

.net - 匿名类型缺少成员问题的动态 View - MVC3

c# - 双重 TryParse 混淆

c++ - 尝试 "blur"C++ 中的矩阵;有缺陷的算法或代码?

c++ - 在 C++ 中从给定的未排序整数 vector 中获取最长排序元素序列的最简单方法

c# - 适用于 Windows 8(开发人员预览版)的任何好的简单 DirectX 示例?

c# - 确保奥尔良管道执行中的消息顺序

c# - 投 listView.SelectedIndices 到 List<int>

c# - 套接字异常 : address incompatible with requested protocol

c++ - 具有结构组件的类构造函数