C++ で Win32 アプリケーションを作成しています。
私が作成したいのは、WinCE と互換性のあるこのアプリケーションの .exe です。プラットフォームを変更したほうがよいと思いました。しかし、スマート デバイス プラットフォームでコードを実行すると、多くのエラーが発生します。ソースコードを変更する最良の方法は何ですか?
2 に答える
道は簡単かもしれませんし、非常に難しいかもしれません。ソースコードに依存します。そもそもデバイスのことを考えずに書かれたコードが変更なしで機能することはめったにありません。最初のステップは、デバイス SDK をターゲットとするスマート デバイス プロジェクトにすべてのコードをインポートし、ビルドを試みることです。コンパイラとリンカは、実行しなければならない作業を示します。
直面する可能性のある大きな問題点のいくつかは次のとおりです。
- Windows CE は Win32 のサブセットであるため、コードが CE で使用できない API を使用している可能性があります。それらの代替手段を見つける必要があります。
- Windows CE は非常に Unicode に偏っており、ほとんどの Win32 API には CE の ASCII バージョンさえありません。デスクトップ コードの負荷は ASCII ベースです。そのコードをすべて作り直す必要があります。TCHAR マクロを使用すると、コードの下位互換性を保つことができます。
- コードがインライン ASM を使用している場合、特にコードが異なり、インライン ASM がサポートされていない ARM に移行する場合は、作業が困難になる可能性があります。
- CE の UI/GDI は、デスクトップよりも大幅に制限されています。UI は簡単に移植するのが難しい場合があります。
- サードパーティのライブラリを使用していますか? もしそうなら、彼らはCEサポートを持っていますか、それともソースコードを入手できますか?
他にもたくさんの小さな「落とし穴」がありますが、コード ベースについて何も知らなければ、それ以上のことを言うのは困難です。繰り返しますが、コンパイラとリンカは、これからどれだけの作業が必要かを最初に把握するものです。
コードの開発とデバッグがはるかに簡単なwin32バージョンを維持することをお勧めします。一部のWindowsCEデバイスでは、デバッガーでコードを実行できない場合があります。
アプリケーションがUNICODEなしでコンパイルされている場合、文字列を必要とするAPI関数を呼び出すたびに、CHAR*文字列をWCHAR*文字列に変換する必要があります。アプリケーションをUNICODEに変換するだけで、時間を大幅に節約できます。それ以外の場合は、どこでもTCHARを使用してください。
一部のコードには、Windows CEプラットフォーム用の特別なバージョンと、Win32用の異なるバージョンが必要であることがわかります。次に、if-defsを使用できます。
#if defined(_WIN32_WCE)
/// windows ce code version
#else
/// win32 code version
#endif
Windows CE 5.0に移植する場合は、メモリの制限に備えてください。プロセスあたり32MBですが、実際には、コードで使用できるのはそれよりも少なくなります。デバイスには実際には120+MBまたはRAMを搭載でき、それにアクセスするにはメモリマップトファイルを使用できます。