この問題はまれですが、いくつかの情報が見つかります。
一般的な解決策は、VS2008 でバイナリを再構築することです ( TCPMP new VS2008 builds for WM6.1 ) が、ソース コードがない場合は役に立ちません。
cegcc メーリング リスト ( Windows Mobile 6.1 の arm-wince-cegcc ) で問題の説明と別の解決策を見つけました。Windows Mobile 6.1では、メモリ管理スキームが変更されました。
このスロット配置は、 Windows Mobile 2003からWindows Mobile 6.0までほぼ一定でした。ただし、Windows Mobile 6.1のリリースでは、 DLLのプレッシャーを軽減し、デバイス マネージャーのプロセス空間を支援するために変更が加えられました。
Windows Mobile 6.1では、デバイス マネージャーのスタックがプロセスのスロットに割り当てられなくなりました。代わりに、オペレーティング システムはデバイス マネージャ スレッド スタック用に、 Large Memory Areaの上部にあるスロット 59を使用します。...
この問題の回避策は、レジストリで DLL を宣言することです (OS にそれを高メモリにロードしないように指示します)。
私はこの回避策が気に入らないので、バイナリパッチャーを見つけようとしています。そしてそれを見つけました:)
これは実際にはパッチャーではなく、UPX (eXecutablesの究極のパッカー) です。しかし、それは問題を完全に解決します。UPXでパックされた DLL は、アプリケーションをクラッシュさせず、正常に動作します。