Как создать Win32 SmartPone DLL и вызова с помощью C# DllImport в WinCE

Мне нужно реализовать Win32 DLL и нужно вызвать его с помощью C# DllImport в WinCE. Поэтому я создаю проект Win32 Smart Device Project и выбираю Windows Mobile 5.0 Smartphone SDK, а также создаю проект dll с опцией экспорта символов. Затем я добавляю ключевое слово extern "C" перед объявлением функции:

.час

#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, чтобы вздрогнуть папку исполняемых файлов Может кто-нибудь поделиться со мной некоторым опытом?

2 ответа

Решение

Вы создали это с помощью Smartphone SDK, который основан на ARM. Эмулятор CE 5.0 эмулировал x86, поэтому он не будет вызываться там. Если ваше устройство CE 6.0 также основано на x86, то оно тоже будет иметь такую ​​же проблему. Попробуйте собрать его с помощью x86 SDK.

Ваш WinCE2.dll не копируется в исполняемую папку приложения устройства WinCE. Попробуйте получить то же самое с помощью FileInfo. Я не могу найти файл. Проверьте настройки проекта и добавьте wince2.dll, установите его в качестве типа контента и предоставьте возможность копирования, если новее.

Другие вопросы по тегам