如何在WinCE中创建win32 smartpone dll并通过C#DllImport调用

如何在WinCE中创建win32 smartpone dll并通过C#DllImport调用,c#,c++,windows-ce,.net-cf-3.5,C#,C++,Windows Ce,.net Cf 3.5,我需要实现一个Win32 DLL,并需要在WinCE中通过C#DllImport调用它。 因此,我创建了一个Win32智能设备项目,并选择了Windows Mobile 5.0智能手机SDK, 并使用“导出符号”选项创建dll项目。 然后在函数声明之前添加外部“C”关键字: h .cpp 当我在C#中使用DllImport时: 在WinCE 5.0 emulator和WinCE6.0设备中,我总是遇到一个System.MissingMethodException 我在谷歌上搜索了一些信息,找到了

我需要实现一个Win32 DLL,并需要在WinCE中通过C#DllImport调用它。 因此,我创建了一个Win32智能设备项目,并选择了Windows Mobile 5.0智能手机SDK, 并使用“导出符号”选项创建dll项目。 然后在函数声明之前添加外部“C”关键字:

h

.cpp

当我在C#中使用DllImport时:

在WinCE 5.0 emulator和WinCE6.0设备中,我总是遇到一个System.MissingMethodException

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

LIBRARY     "WinCE2"
EXPORTS
Add         DATA 
但是在论坛上有人说u declspec(dllexport)可以替换.def文件。 但是这个解决方案也得到了System.MissingMethodException

然后我找到了一个关于堆栈溢出的解决方案: 我需要添加cdecl关键字。 我创建了一个Win32 DLL项目,我发现项目设置将在默认情况下添加_cdecl。 但Win32智能手机项目并非如此。 所以我尝试了一下,但也得到了System.MissingMethodException。 然后我在Win32 DLL中尝试相同的代码并通过C#调用,它可以工作。 所以我不知道为什么wince不能工作。 我已将dll复制到wince可执行文件文件夹
谁能跟我分享一些经验吗

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

您是使用基于ARM的智能手机SDK构建的。CE5.0仿真器模拟了x86,因此它在那里不可调用。如果您的CE6.0设备同样基于x86,那么它也会有同样的问题。尝试使用x86 SDK构建它。

是否使用dumpbin检查DLL是否以expexted名称导出函数?我使用dumpbin检查DLL,但找不到函数。我是否需要任何项目设置?WinCE2.dll被复制到WinCE设备应用程序可执行文件夹。我在我的WinCE emulator和WinCE设备文件夹中复制了它,但也得到了MissingMethodException。如果flofer中不存在dll,可能我遇到了类似FileIsNotExist?的异常,并且.NET smartphone项目无法向项目添加引用,所以我手动复制了。
extern "C" WINCE2_API int __cdecl Add(int A,int B)
{
    return A+B;
}
[DllImport("WinCE2.dll", EntryPoint = "Add")]
static extern int Add(int A, int B);
LIBRARY     "WinCE2"
EXPORTS
Add         DATA