繁体   English   中英

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

[英]runtime error when calling a C++ dll from C# .NET windows application

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

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


System.Windows.Forms.dll中发生了类型为'System.IO.FileNotFoundException'的未处理异常

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


当我在按钮click事件中放入以下代码(例如)时,抛出此异常。

    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,而该dll在您的计算机上不存在。

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

Dependency Walker: http//www.dependencywalker.com/

看起来编译器没有将引用的dll放在输出文件夹中。 我只是手动将它放在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM