4

感谢 StackOverflow 的专家。你们真棒。我发布了关于在Compact 框架应用程序上检测空闲时间的问题,并很快得到了答案。当我在我的 Windows XP 开发盒上尝试建议的解决方案时,我收到了这个错误

无法加载 DLL 'coredll.dll':找不到指定的模块。(在 Windows XP 上)

谷歌搜索了一段时间后,我了解到 OpenNETCF 库正在尝试启动 coredll.dll 来检测空闲时间,但这个 dll 仅随 Windows Mobile 操作系统提供。由于我们在 Windows XP PC 上开发应用程序并且现在无法访问 Windows CE 设备,因此我们遇到了这个问题。

有什么方法可以在 Windows XP 上获取 coredll.dll 吗?这个问题还有其他解决方案吗?

更新:我们的目标是在 Windows Mobile 6 Professional 上运行的设备的应用程序

4

3 回答 3

11

我很困惑。该问题专门针对适用于 Windows CE 的 Compact Framework。如果您还没有目标硬件,请使用模拟器。

这种特定情况下,SDF 不是 P/Invoking 来执行此操作,它使用的是IMessageFilter实现。您可以轻松地对桌面执行相同操作。

但话虽如此,您根本无法开发针对 XP 的 CF 应用程序。这意味着,如果您使用完整的框架创建应用程序,以桌面为目标,并期望它在您获得 CE 设备时运行,您会大吃一惊。如果同时针对两个操作系统是设计目标,那么还有很多工作要做,而且大多数 UI 内容是不可转移的(我实际上建议对两个目标和通用业务逻辑使用不同的 UI 程序集)。

编辑1

我想更全面地回答“我可以为我的桌面获取 coredll.dll 吗?”的问题。答案是响亮的“不”。有很多原因这不起作用(它在 ROM 中,它依赖于硬件,它实际上不是一个文件,而是固定在原地执行,它是为不同的操作系统编译的,它可能是为完全不同的处理器编译的, ETC)。

你有几个选择。您可以尝试创建 coredll.dll 的桌面版本,该版本导出您想要的所有功能并将它们代理到 kernel32、user32 等 DLL。这是一大堆工作(去过那里,试过了)。

您可以尝试编写适用于两个平台的代码。可行,但也颇具挑战性。

简而言之,除非您绝对必须同时针对两者,否则您不想尝试。获取一个模拟器虚拟 PC或某种评估系统,并以此为目标。

于 2009-09-24T14:00:10.183 回答
2

您不能在 Windows PC 中运行 OpenNetCF。您需要使用 Windows CE 仿真器。这是随Windows CE SDK一起提供的。

于 2009-09-24T13:58:40.670 回答
0

编写适用于两个平台的代码。

在我们的解决方案中,任何将触及平台的东西都被抽象为不同的对象。因此,我们有一个 IPlatformServices 对象(返回 IPowerManagement、IPrinter 等内容)我们有两个不同的实现,一个 PCPlatformServices 和一个 CEPlatformServices,返回的一个基于 Environment.PlatformID 值。在您的场景中,您需要 2 个不同的 IdleDetector 对象,一个用于 CE,一个用于 Desktop。是的,识别和抽象所有这些有点痛苦,但你需要这样做,因为你想要两个不同平台之间的兼容性。

我们的“PCPlatformServices”在我们的案例中主要是模拟,因为我们只希望桌面兼容性来更快地测试不与硬件交互的事物(如应用程序代码/业务逻辑)

于 2009-09-29T14:30:37.533 回答