Мне нужно реализовать Win32 DLL и нужно вызвать ее с помощью C # DllImport в WinCE.Поэтому я создаю Win32 Smart Device Project и выбираю Windows Mobile 5.0 Smartphone SDK, а также создаю проект dll с опцией экспорта символов.Затем я добавляю ключевое слово extern "C" перед объявлением функции:
.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;
}
Когда я использую DllImport в C #:
[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 Smartphone не является.Так что я пытаюсь, но также получил System.MissingMethodException.Затем я пробую тот же код в Win32 DLL и вызываю на C #, он может работать.Поэтому я не понимаю, почему Винс не может работать.Я скопировал dll, чтобы взломать папку с исполняемыми файлами. Может кто-нибудь поделиться со мной опытом?