感谢StackOverflow的大师们。你们真棒。我在detecting idle time on a Compact framework application and got answers very quickly上发布了问题。当我在Windows XP开发框中尝试建议的解决方案时,我收到此错误
无法加载DLL'coredll.dll': 找不到指定的模块。 (在Windows XP上)
谷歌搜索了一段时间后我才知道OpenNETCF库正在尝试启动coredll.dll以检测空闲时间,但这个dll只用Windows Mobile OS。由于我们正在Windows XP PC上开发应用程序并且现在无法访问Windows CE设备,因此我们对此问题感到震惊。
有没有办法在Windows XP上获取coredll.dll?解决这个问题的其他方法吗?
已更新:我们的目标是在Windows Mobile 6 Professional上运行设备的应用程序
答案 0 :(得分:10)
我很困惑。问题是专门针对Windows CE的Compact Framework。如果您还没有目标硬件,请使用模拟器。
在这个特定情况中,SDF不是P / Invoking这样做,而是使用IMessageFilter实现。你可以轻松地为桌面做同样的事情。
但是说,你根本无法开发针对XP的CF应用程序。这意味着,如果您使用完整框架创建应用程序,以桌面为目标,并期望它在您获得CE设备时运行,那么您会感到非常惊讶。如果针对这两个操作系统是一个设计目标,那么还有很多工作要做,而且大多数UI内容都不可转移(我实际上建议为两个目标和常见的业务逻辑使用不同的UI程序集。)
<强> EDIT1 强>
我想更全面地回答“我可以为我的桌面获取coredll.dll吗?”的问题。答案是响亮的“不”。这有多种原因不起作用(它在ROM中,它依赖于硬件,它实际上不是一个文件,而是固定到就地执行,它是针对不同的OS编译的,它可能被编译为完全不同的处理器等)。
你有几个选择。您可以尝试创建一个桌面版本的coredll.dll,它导出您想要的所有函数,并将它们代理到kernel32,user32等DLL。这是一大堆工作(been there, tried that)。
您可以尝试write code that will work for both platforms。可行,但也很具挑战性。
缺点是,除非你绝对必须同时瞄准两者,否则你不想尝试。获取an emulator,virtual PC或某种eval system,然后定位。{/ p>
答案 1 :(得分:2)
您无法在Windows PC中运行OpenNetCF。您需要使用Windows CE模拟器。这附带Windows CE SDK。
答案 2 :(得分:0)
编写适用于两种平台的代码。
在我们的解决方案中,任何触及平台的内容都会被抽象出来。因此,我们有一个IPlatformServices对象(返回IPowerManagement,IPrinter等东西)我们有两个不同的实现PCPlatformServices和一个CEPlatformServices,返回的对象是基于Environment.PlatformID值。在您的场景中,您需要2个不同的IdleDetector对象,一个用于CE,另一个用于桌面。是的,要识别和抽象所有这些有点痛苦,但你需要做到这一点就是你想要两个不同平台之间的兼容性。
我们的“PCPlatformServices”在我们的案例中主要是模拟,因为我们只希望桌面兼容性能够更快地测试不与硬件交互的东西(如应用程序代码/业务逻辑)