【问题标题】:runtime error when calling a C++ dll from C# .NET windows application从 C# .NET windows 应用程序调用 C++ dll 时出现运行时错误
【发布时间】:2011-02-28 16:06:30
【问题描述】:

我有一个具有 C# 用户界面的 C# .NET windows 应用程序,所有处理背后的代码都是通过调用作为 C# 项目引用添加的 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# .net c++ exception dll


    【解决方案1】:

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

    您可以使用“Dependency Walker”之类的实用程序将您的 C++ dll 加载到您遇到问题的机器上,它会指出任何缺少的依赖项。然后需要弄清楚这个依赖是什么(例如,缺少 C++ 运行时版本),然后确保将其直接打包到您的应用程序中,或者在合适的情况下通过合并模块打包。

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

    【讨论】:

    • 谢谢。我设法找到了依赖 walker 显示的一些缺失的 dll 路径。修复这些后,它似乎正在工作:)
    【解决方案2】:

    编译器似乎没有将引用的 dll 放在输出文件夹中。我会手动把它放在那里。

    【讨论】:

    • 这不是问题。我检查并正确创建和引用了 dll。
    • 失败项目的输出文件夹{Project}\bin\Debug。 Visual Studio 应该从您引用它的任何地方复制 dll,但有时不会。
    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多