Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

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

H:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DXMISC>

なんと多数のビルドエラーが出てビルドできません。

で、もっと調べてみたところ、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 用のものに非常に近い内容になっています。