CE6で IDirectDraw4 インターフェースが使えない件
最近 DirectDraw を使ってオーバーレイバッファをいじったりしていました。
とりあえずディスプレイドライバのサポート状況を調べるために昔からあるddcapsやdxview をビルドしてみようとしたところ...
\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DXMISC\DDCAPS
\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DXMISC\DXVIEW
BUILD: [00:0000000249:PROGC ] Total 3 30 163
BUILD: [00:0000000250:PROGC ]
BUILD: [00:0000000251:PROGC ] 30 Warnings, 163 Errors
BUILD: [00:0000000252:PROGC ] GetSystemTimes (seconds): Idle: 2 Kernel: 2 User: 1
BUILD: [00:0000000253:PROGC ] Elapsed time (seconds): 2
なんと多数のビルドエラーが出てビルドできません。
で、もっと調べてみたところ、CE5までは存在したIDirectDraw4がWindows Embedded CE 6.0 ではリネームされて新 IDirectDrawとなり、 DDCAPS構造体のメンバも大幅に変更されている模様です。
Migrating DirectDraw Interfaces and Functions
http://msdn.microsoft.com/en-us/library/aa916681.aspx
Migrating DirectDraw Structures
http://msdn.microsoft.com/en-us/library/aa919057.aspx
Migrating DDHAL functionality
http://msdn.microsoft.com/en-us/library/ee486910.aspx
これまでは幸か不幸かデスクトップWindows用DirectX8.1のDirectDrawとソースコードの互換がありましたが、これからはCE6向け以降ではコードの書き方を変える必要がありそうです。
[2010.2.1 追記]
さらに調べてみたところ、CE 6 で更新された内容は、実はWindows Mobile 5.0 / 6.0 用に用意されたもののようです。WM 5/6 Pocket PC SDKをインストールするとそれぞれ以下の場所に ddraw.h がインストールされますが、
\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Include\Armv4i\ddraw.h
\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i\ddraw.h
これらの内容と CE6用 ddraw.h
\WINCE600\PUBLIC\COMMON\SDK\INC\ddraw.h
の内容は非常に近いものになっています。一方、(前述のように) CE 5.0 用のddraw.h は CE 2.12/3/4.x 用のものに非常に近い内容になっています。