2010-09-07 96 views
2

我與這個question中的海報完全一樣的問題。我有一個Visual Studio C#項目,我試圖從另一個DLL中調用函數(這也是解決方案的一部分)。Windows 7中的C#DLL問題

的DLL是一個C++一個和導出功能我想打電話給在C#中聲明如下:

[DllImport("SomeDLL.dll")] 
private extern static IntPtr SomeFunction(IntPtr someVar1, IntPtr someVar2, bool someVar3); 

當我嘗試調用從C#我看到的功能在控制檯上以下在調試器輸出:

'MyApp.exe將':加載 'C:\ SomePath \構建\渦\調試\ SomeDLL.dll'
'MyApp.exe的':卸載 「C:\ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll'
我的電腦「:已加載 'C:\ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll'已加載 'C:\ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll'

和我碰到下面的錯誤對話框:

無法加載DLL 'SomeDLL.dll':該 指定的模塊找不到。 (來自HRESULT的異常:0x8007007E)

有問題的代碼在我的同事windows XP機器上工作正常。解決方案中還有另一個C++ DLL可以正常工作。

+0

正如你已經標記了Windows 7 - 64位,有可能你的dll可能是32位特定的,或者它可能依賴於32位dll。您可以嘗試爲x86平臺構建項目,並檢查錯誤是否消失(僅查看32位/ 64位是否存在問題)。 – VinayC 2010-09-07 05:45:57

回答

2

問題似乎是SomeDll.dll無法加載。有幾個不同的原因,爲什麼會發生這種情況,其中一些是:

  1. 該DLL是32位,您正在運行一個64位進程(或其他方式)。
  2. SomeDLL.dll有一些不可用的附加依賴項(其他dll:s或COM組件)。

你可以在你的somedll.dll上運行Dependeny Walker:http://www.dependencywalker.com/,看看問題是否是第2點。

+0

當我將這些文件複製到我的C#項目的工作目錄中時,非工作的DLL對一些其他DLL有依賴關係。 – 2010-09-07 06:17:49