4

Thanks to the gurus at StackOverflow. You guys are awesome. I posted on question on detecting idle time on a Compact framework application and got answers very quickly. When I tried the suggested solution on my Windows XP development box, I get this error

Unable to load DLL 'coredll.dll': The specified module could not be found. (On Windows XP)

After googling for sometime I understood that OpenNETCF libraries are trying to launch coredll.dll to detect the idle time but this dll is shiped with only Windows Mobile OS. As we are developing the application on a Windows XP PC and dont have access to Windows CE device now, we are struck with the problem.

Is there any way to get coredll.dll on Windows XP? Any other solution to this problem?

Updated: we are targeting the application for device running on Windows Mobile 6 Professional

4

3 に答える 3

11

よくわかりません。質問は特に、Windows CE 用の Compact Framework に関するものでした。ターゲット ハードウェアがまだない場合は、エミュレーターを使用してください。

この特定のケースでは、SDF はこれを行うために P/Invoking ではなく、IMessageFilter実装を使用しています。デスクトップでも同じことが簡単にできます。

とはいえ、XP を対象とした CF アプリケーションを開発することはできません。つまり、完全なフレームワークを使用してデスクトップをターゲットにしてアプリを作成し、CE デバイスを入手したときにアプリが実行されることを期待すると、大きな驚きに直面することになります。両方の OS をターゲットにすることが設計目標である場合、多くの作業が必要であり、ほとんどの UI は移行できません (実際には、2 つのターゲットと共通のビジネス ロジックに対して異なる UI アセンブリを使用することをお勧めします)。

編集1

「私のデスクトップ用の coredll.dll を入手できますか?」という質問に、より完全に答えることができると思います。答えは圧倒的に「いいえ」です。これが機能しない理由は多数あります (ROM 内にある、ハードウェアに依存する、実際にはファイルではなく、その場で実行するように修正されている、別の OS 用にコンパイルされている、まったく別のプロセッサ用にコンパイルされている可能性があります)。など)。

いくつかのオプションがあります。必要なすべての機能をエクスポートし、それらをkernel32、user32などのDLLにプロキシするcoredll.dllのデスクトップバージョンを作成してみてください。それは大変な作業です(そこに行って、試してみました)。

両方のプラットフォームで機能するコードを作成してみてください。実行可能ですが、非常に挑戦的でもあります。

手短に言えば、絶対に両方をターゲットにしなければならない場合を除いて、試みたくないということです。emulatorvirtual PC、またはある種のeval systemを入手して、それをターゲットにします。

于 2009-09-24T14:00:10.183 に答える
2

WindowsPCでOpenNetCFを実行することはできません。WindowsCEエミュレータを使用する必要があります。これは、WindowsCESDKに付属しています。

于 2009-09-24T13:58:40.670 に答える
0

両方のプラットフォームで機能するコードを記述します。

私たちのソリューションでは、プラットフォームに接触するものはすべて、さまざまなオブジェクトに抽象化されます。したがって、IPlatformServicesオブジェクト(IPowerManagement、IPrinterなどを返す)があり、PCPlatformServicesとCEPlatformServicesの2つの異なる実装があり、返される実装はEnvironment.PlatformID値に基づいています。シナリオでは、2つの異なるIdleDetectorオブジェクトが必要です。1つはCE用、もう1つはデスクトップ用です。これらすべてを識別して抽象化するのは少し面倒ですが、2つの異なるプラットフォーム間の互換性が必要な場合は、これを行う必要があります。

私たちの「PCPlatformServices」は主に私たちの場合はモックです。デスクトップの互換性がハードウェアと相互作用しないもの(アプリコード/ビジネスロジックなど)をより迅速にテストすることだけを望んでいるからです。

于 2009-09-29T14:30:37.533 に答える