我需要实现一个Win32 DLL,需要在WinCE中通过C#DllImport调用它。 所以我创建了一个Win32智能设备项目并选择了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;
}
当我在C#中使用DllImport时:
[DllImport("WinCE2.dll", EntryPoint = "Add")]
static extern int Add(int A, int B);
我在WinCE 5.0模拟器和WinCE6.0设备 中总是遇到 System.MissingMethodException。
我搜索了谷歌上的一些信息,找到了一些解决方案。 首先,在项目中添加.def:
LIBRARY "WinCE2"
EXPORTS
Add DATA
但是在论坛中有人说__declspec(dllexport)可以替换.def文件。 但是这个解决方案也得到了System.MissingMethodException。
然后我在Stack Overflow上找到了一个解决方案: 我可以添加__cdecl关键字。 我创建了一个Win32 DLL项目,我发现项目设置默认会添加__cdecl。 但Win32智能手机项目不是。 所以我尝试了,但也得到了System.MissingMethodException。 然后我在Win32 DLL中尝试相同的代码并通过C#调用,它可以工作。 所以我不知道为什么畏缩不行。 我已将dll复制到wince可执行文件夹 任何人都可以与我分享一些经验吗?
答案 0 :(得分:2)
您使用基于ARM的Smartphone SDK构建了此功能。 CE 5.0仿真器模拟了x86,所以它不会在那里调用。如果您的CE 6.0设备同样基于x86,它也会遇到同样的问题。尝试使用x86 SDK构建它。
答案 1 :(得分:1)
您的WinCE2.dll未复制到WinCE设备应用程序可执行文件夹。尝试使用FileInfo获得相同的内容。我找不到文件。检查项目设置并添加wince2.dll并将其设置为内容类型,如果更新选项,则提供副本。