.NET Compact Frameworkの下位互換性

オソロシイ記事

Kzou'sさんところ( http://d.hatena.ne.jp/kzou/ )で
オソロシイ記事( http://d.hatena.ne.jp/kzou/20051115/1132010281 )が、ありましたので調べてみました。
.NET Framework1.1準拠でEBtWDEを作って、.NET Compact Framework 1.0に移植して動かすつもりだった私としては、非常にオソロシイ^^;

始めに、

私は上位互換が無いのは知っていますが、下位互換があるかどうかは調べたことがありませんでした。

Windows Mobile 5.0

に搭載されている .NET Compact Framework は 1.0SP3 でした。これには、意外です^^;
てっきり2.0が載っているのだと思っていました。さて、PocketPC 2003 は 1.0SP1 , PocketPC 2003SE は 1.0SP2 すると下位互換性は間違いなくあるでしょう。

すると、

UnmanagedCodeと言われる.NET 非準拠の部分が起因している可能性が高いです。
.NET Frameworkは少し特殊な事をしようとするとManagedCode(.NET準拠)では間に合わない事が多々あります。EBtWDEで言うと、ini設定保存やスクリーンショット撮影、強制最前面などがそれに当たります。特にサウンドに関しては無力です。

なので、

.NET Frameworkはもちろん、.NET Compact Frameworkも対応しているある意味、究極のクラスがあります。

 System.Runtime.InteropServices.DllImportAttribute

そう、DLL呼び出しです。たとえ、アプリが.NET Framework準拠でも、これを使った場合完全な互換性は失われます。EBtWDEでも使っていますが、Windowsにはこれまでもれなく搭載されたDLLを使っているので、ご安心下さい。よって、大幅な仕様変更がなされたWindows Mobile 5.0では、これまで使えたUnmanagedな命令やDLLが使えなくなり、それによりいくつか動かないアプリが出てしまった。と言うのが私の結論です。全て、ManagedCodeで書かれた物なら問題なく動作するはずです。