我需要實現Win32 DLL並需要通過WinCE中的C#DllImport調用它。 因此,我創建了一個Win32智能設備項目,並選擇Windows Mobile 5.0智能手機SDK, ,並使用導出符號選項創建一個dll項目。 後來我之前函數聲明添加的extern 「C」 關鍵詞:如何通過WinCE中的C#DllImport創建win32 smartpone dll和調用
.H
#ifdef WINCE2_EXPORTS
#define WINCE2_API __declspec(dllexport)
#else
#define WINCE2_API extern "C" __declspec(dllimport)
#endif
extern "C" WINCE2_API int __cdecl Add(int A,int B);
的.cpp
extern "C" WINCE2_API int __cdecl Add(int A,int B)
{
return A+B;
}
當我在C#中使用的DllImport:
[DllImport("WinCE2.dll", EntryPoint = "Add")]
static extern int Add(int A, int B);
我總是得到一個System.MissingMethodException在WinCE 5.0仿真器和WinCE6.0設備中。
我在google搜索了一些資料,發現了一些解決辦法。 首先,添加.DEF項目:
LIBRARY "WinCE2"
EXPORTS
Add DATA
但是,在一個論壇上有人說__declspec(dllexport)的可替代的DEF文件。 但是這個解決方案也得到了System.MissingMethodException。
然後我發現堆棧溢出的解決方案: 我可能需要添加__cdecl關鍵字。 而我創建了一個Win32 DLL項目,我發現項目設置會在默認情況下添加__cdecl。 但Win32智能手機項目不是。 所以我嘗試了,但也得到了System.MissingMethodException。 然後我在Win32 DLL中嘗試相同的代碼並通過C#調用,它可以工作。 所以我不爲什麼wince不能工作。 我已經將dll複製到wince可執行文件文件夾 任何人都可以分享我的一些經驗嗎?
您是否使用dumpbin檢查過,該DLL是否以導出的名稱導出函數? – harper
我用dumpbin來檢查DLL,但是我找不到這個函數。 我是否需要任何項目設置? –