【发布时间】:2011-07-29 05:01:29
【问题描述】:
我需要实现一个 Win32 DLL 并需要在 WinCE 中通过 C# DllImport 调用它。 所以我创建了一个 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;
}
当我在 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# 调用,它可以工作。 所以我不明白为什么 wince 不能工作。 我已将 dll 复制到 wince 可执行文件文件夹 任何人都可以分享我一些经验吗?
【问题讨论】:
-
你用dumpbin检查过,DLL导出了expexted名字的函数吗?
-
我用dumpbin检查DLL,但找不到函数。我是否需要任何项目设置?
标签: c# c++ windows-ce .net-cf-3.5