Как создать Win32 SmartPone DLL и вызова с помощью C # DllImport в WinCE - PullRequest
2 голосов
/ 29 июля 2011

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

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

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

1 голос
/ 29 июля 2011

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

...