gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:35 24 4
gpt4 key购买 nike

我需要实现一个 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 Project,我发现项目设置默认会添加__cdecl。但 Win32 Smartphone 项目不是。所以我尝试了一下,但也得到了 System.MissingMethodException。然后我在 Win32 DLL 中尝试相同的代码并通过 C# 调用,它可以工作。所以我不明白为什么 wince 不能工作。我已经将dll复制到wince可执行文件文件夹任何人都可以分享我一些经验吗?

最佳答案

您使用基于 ARM 的智能手机 SDK 构建了它。 CE 5.0 模拟器模拟了 x86,所以它不会在那里被调用。如果您的 CE 6.0 设备同样是基于 x86 的,它也会遇到同样的问题。尝试使用 x86 SDK 构建它。

关于c# - 如何在WinCE中创建win32 smartpone dll并通过C# DllImport调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6868832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com