2012-11-05 33 views
0

我用C/C++編寫的程序修改了它的主函數,接受一些參數作爲輸入並返回一個變量作爲輸出並創建一個Win32 DLL。然後我創建了一個使用InterOp訪問第一個DLL的.NET DLL。現在,當我在我的C#應用​​程序中加載.NET DLL時,我從DLL中得到一個System.DllNotFoundException,這真的讓我感到困惑,因爲程序從來沒有存在內存問題,並且這兩個Win32/.NET dll都位於相同的目錄中從修改主函數,代碼沒有真正改變)。 該解決方案在this線程中提供,這是我原來的問題。我很確定答案是正確的,但我只是錯過了一些東西。.NET DLL中的System.DllNotFoundException

你可以下載我的VS解決方案Here。該解決方案包含三個項目:Win32 DLL,.NET DLL和引用.NET DLL的Winform應用程序(但是當嘗試測試時會給出DLL異常)。任何幫助或調試指導將不勝感激。

  • 更新:我已經嘗試了下面的所有提示/建議,但我仍然得到完全相同的錯誤。如果它使事情變得更容易,我的VS解決方案可以在上面的超鏈接中下載。
+4

確保本地DLL被複制到與EXE相同的目錄中,並且它的所有依賴項(如CRT)也都被安裝。如果您不知道可能會丟失什麼,請使用SysInternals的ProcMon。 –

+0

@HansPassant如果您下載VS項目,您會注意到C#應用程序在同一個文件夾中同時包含dll和exe。順便說一下,我的Windows 7/8機器和Windows服務器上出現同樣的錯誤 – globetrotter

回答

1

確保您所放置的Win32 DLL的開/窗/ system32文件夾下(如果只DLL的名稱被傳遞到的DllImport)

另外,您還可以傳遞給DllImport屬性的DLL的完整路徑。

使用諸如Dependency Walker之類的工具來確保您不會錯過任何相關的程序集。

+0

我正在使用與.NET DLL位於同一文件夾中的[DllImport(「LibClos​​eWin32.dll」)],不夠? – globetrotter

+0

複製並測試,同樣的錯誤:/ – globetrotter

+0

使用依賴關係walker來查看是否缺少任何依賴關係 –