【问题标题】:How to create win32 smartpone dll and call by C# DllImport in WinCE如何在 WinCE 中创建 win32 smartpone dll 并通过 C# DllImport 调用
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • WinCE2.dll 被复制到 WinCE 设备应用程序可执行文件夹。我将它复制到我的 WinCE 模拟器和 WinCE 设备文件夹中,但也得到了 MissingMethodException。如果 dll 在 flofer 中不存在,也许我得到了 FileIsNotExist 之类的异常?
    • 而.NET智能手机项目无法添加对项目的引用,所以我手动复制了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多