2010-06-07 92 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