2008-11-26 161 views
5

這是所有的C#大師。我已經有一段時間了,我已經在這個問題上激怒了,在網上嘗試了各種各樣的建議,但沒有成功。該行動發生在Windows Mobile 5.0中。如何解決.NET CF異常「無法找到PInvoke DLL」?

我有一個名爲MyDll.dll的DLL。在MyDll.h我:

extern "C" __declspec(dllexport) int MyDllFunction(int one, int two); 

在MyDll.cpp的MyDllFunction的定義是:

int MyDllFunction(int one, int two) 
{ 
    return one + two; 
} 

的C#類包含以下聲明:

[DllImport("MyDll.dll")] 
extern public static int MyDllFunction(int one, int two); 

在同我打電話給我的MyDllFunction如下:

int res = MyDllFunction(10, 10); 

這就是血腥的事情不斷給我的地方「找不到PInvoke DLL'MyDll.dll'」。我已驗證我其實可以做的PInvoke系統調用,如「GetAsyncKeyState(1)」,聲明如下:

[DllImport("coredll.dll")] 
    protected static extern short GetAsyncKeyState(int vKey); 

的MYDLL.DLL是在同一文件夾中的可執行文件,並且我也有嘗試將其放入/ Windows文件夾中,不做任何更改或成功。任何建議或解決方案,不勝感激。

+0

請確保您有足夠的空閒虛擬內存,因爲P/Invoke導入可能會失敗。 – arul 2008-11-26 07:26:12

+0

您是否在項目中添加了dll作爲參考?如果你這樣做,那麼你不需要手動複製文件。如果問題依然存在,那很可能是由於dll文件沒有正確構建(也許是不同的平臺)。 – kgiannakakis 2008-11-26 07:22:31

+0

兩個項目都在相同的解決方案中,並且它們一起部署,無需手動上傳。 – 2008-11-26 10:05:43

回答

2

也許這似乎是一個明顯的事情來檢查,但你編譯正確的CPU架構本地DLL? IIRC,Windows Mobile在多種CPU架構上運行。

0

您列出的異常和您在問題中放置的pinvoke簽名具有不同的名稱:分別爲MyDll.dll和ThreadBenchLib.dll。這是一個錯字還是這個問題?

如果不是問題,請嘗試打開depends中的DLL。由於未滿足的依賴關係,可能導致DLL加載失敗。

4

我有同樣的問題,但這次在涉及的平臺上沒有明顯的區別。爲什麼它被認爲是'正常'的東西是如此嚴重的記錄,如此困難,最糟糕的是如此'片狀'。 是否有任何工具可以讓我進入我的PPC模擬器,並通過步驟檢查(a)dll是CLR所期望的位置(我已將它放在同一目錄中,並且模擬器上的windows目錄 - (b)CLR可以加載它(有足夠的內存等),(c)然後CLR可以找到存在的函數(如果我能超越愚蠢的'找不到dll的錯誤)

我很想強迫蓋茨或者任何'windows mobile'團隊使用他們創建的廢話。

0

我有同樣的問題。我使用Depends.exe來查找WinCE dll依賴項,並且它依賴於調試dll。 (MSVCR90D.dll) 爲了解決這個問題,我編譯了一個發行版,並確認依賴關係,之後它工作正常。

我希望能幫到

相關問題