如何创建win32智能手机dll并在WinCE中使用c#调用dll



我需要实现一个Win32 DLL,需要在WinCE中通过c# DllImport调用它。所以我创建了一个Win32智能设备项目,选择了Windows Mobile 5.0智能手机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);

我总是得到一个系统。MissingMethodException在WinCE 5.0模拟器和WinCE6.0 Device.

我在谷歌上搜索了一些信息,找到了一些解决方案。首先,添加.def项目:

LIBRARY     "WinCE2"
EXPORTS
Add         DATA 

但是在论坛上有人说__declspec(dlexport)可以代替。def文件。但是这个解决方案也得到System.MissingMethodException.

然后我找到了Stack Overflow的解决方案:我可能需要添加__cdecl关键字。我创建了一个Win32 DLL项目,我发现项目设置将默认添加__cdecl。但Win32智能手机项目并非如此。我试了一下,但也得到了system。missingmethodexception。然后我在Win32 DLL中尝试相同的代码,并通过c#调用,它可以工作。所以我不知道为什么畏缩不起作用。我已经复制了dll到wince可执行文件文件夹谁能告诉我一些经验?

您使用基于arm的智能手机SDK构建此应用程序。CE 5.0仿真器仿真的是x86,所以在x86上是不可调用的。如果您的CE 6.0设备同样是基于x86的,那么它也会有同样的问题。尝试使用x86 SDK构建它。

您的WinCE2.dll未复制到WinCE设备应用程序可执行文件夹。尝试使用FileInfo获得相同的结果。我找不到文件了。检查项目设置并添加wince2.dll,并将其设置为内容类型,并提供更新选项的副本。

最新更新