2013-02-15 72 views
4

我正在使用Visual Studio 2012(11.0.51106.01更新1)在64位Windows 7上進行開發。「無法找到指定的過程」.NET 4的錯誤

我有一個支持項目,將一些C代碼編譯成(32位)DLL。在我的頭我有:

#define RET_TYPE(type) _declspec(dllexport) type __stdcall 

RET_TYPE(int) test_dll_call(int invar); 

在我的C文件我有:

RET_TYPE(int) test_dll_call(int invar) 
{ 
    int retVal = 4 * invar; 

    return retVal; 
} 

我也有一個(32位)WPF C#加載一個類,如下所示的內部的DLL應用:

[DllImport("MyDll.dll", CharSet = CharSet.Ansi, BestFitMapping = true, ThrowOnUnmappableChar = true)] 
public static extern int test_dll_call(int invar); 

這被包裹如下:

public void Wrap_TestDllCall() 
{ 
    try 
    { 
     int outTest = 0; 
     int invar = 3; 

     outTest = test_dll_call(invar); 
    } 
    catch (Exception ex) 
    { 
     dllError = ex.ToString(); 
    } 
} 

當我在開發框中的調試器中運行這個時,這可以正常工作。如果我將所有相關文件複製到一個單獨的文件夾並從那裏運行它,它工作正常。

如果我的所有必要的文件夾複製到運行32位Windows XP SP3,我得到以下錯誤另一臺計算機:

System.DllNotFoundException: Unable to load DLL 'MyDll.dll': The specified procedure could not be found. (Exception from HRESULT: 0x8007007F) 
    at MyNamespace.MyClass.test_dll_call(Int32 invar) 
    at MyNamespace.MyClass.Wrap_TestDllCall() 

我用的Dependency Walker在我的編譯exe和dll兩者;它發現的唯一缺失的dll是wer.dllieshims.dll,這在我的研究中並不需要XP。

我已經安裝了VS2012 C++可再發行組件,.NET 4和.NET 4.0.3更新。仍然沒有運氣。

編輯正如漢斯指出,這似乎是,該應用程序無法在DLL中找到的程序;我也曾嘗試:

[DllImport("MyDll.dll", CallingConvention=CallingConvention.Cdecl)] 
public static extern int test_dll_call(int invar); 

__declspec(dllexport) int __cdecl test_dll_call(int invar); 

這也能正常工作在我的dev的盒子,但給出了WinXP的箱相同的錯誤。

幫助!

+0

它不是抱怨缺少DLL,它找不到DLL中的「test_dll_call」函數。很少有可能出錯的方法,除了複製錯誤的DLL以外。 – 2013-02-15 22:28:20

+2

好的,那些其他方式是什麼?它適用於我的開發盒,但不適用於我的WinXP測試筆記本電腦。 – 2013-02-15 22:30:32

回答

6

問題已解決。在我經歷故障排除步驟時,有些事情要注意,對於那些未來會發生這種情況的人來說。

  1. 這個錯誤並不一定意味着它無法找到程序X - 而這可能意味着它無法找到函數Y,從另一個DLL,由X調用。
  2. 確保以'Release'模式編譯DLL,因爲C++可再發行組件不包含調試DLL。
  3. 從一個shell函數開始,並逐個添加件。

在我上面的測試示例中,問題是我編譯爲Debug版本。

但是,在我的完整功能中,該更改沒有解決問題。原來我錯過了一些依賴walker沒有捕獲的DLL。

相關問題