2010-06-07 82 views
2

我有一个C#.NET窗口应用程序具有C#用户界面和所有后面的处理代码是通过调用C++ dll(C++类库项目)对C#项目的引用。运行时错误从C#.NET窗口应用程序调用C++ DLL

不过最近,当我格式化我的电脑,并试图再次运行我的项目,该项目已备份,在Visual Studio 2005年,它提供了以下异常:


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

附加信息:指定的模块找不到。 (异常来自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再次但是我米仍然得到例外。 在我尝试在另一台计算机上运行此项目之前,这发生在我身上。但是,我的机器格式化后,即使我不能运行该应用程序。

解决这个问题的唯一方法就是像以前一样重新创建项目。这是耗时的。

有没有办法避免这个问题,以便我可以在我的电脑以及另一台电脑上运行这个项目?

回答

3

这听起来像你有一个缺少的依赖项,即另一个DLL,你的C++ DLL依赖,这是不存在于你的机器上。

您可以使用像“Dependency Walker”这样的实用工具将C++ dll加载到存在问题的机器上,并指出任何缺失的依赖关系。然后确定这种依赖关系是什么(例如,缺少C++运行时版本),然后确保将其与应用程序一起打包,或者直接打包或通过合并模块打包(如果适用)。

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

+0

谢谢。我设法找到了依赖walker显示的一些丢失的dll路径。修复后,它似乎工作:) – chathuradd 2010-06-08 17:08:15

1

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

+0

那么这不是问题。我检查了该DLL并创建并正确引用。 – chathuradd 2010-06-07 19:48:27

+0

失败项目的输出文件夹“{Project} \ bin \ Debug'。 Visual Studio应该从你引用它的地方复制dll,但有时不会。 – 2010-06-07 20:28:58

+0

是的DLL是在调试文件夹 – chathuradd 2010-06-08 14:54:05