CE5.0 システムで DirectDraw を機能させることに関して、私はしばらくの間問題を抱えていました。Windows Moblie で動作させるためのコードをようやく見つけました。いじりながら、コードを適切にコンパイルすることができました。
Windowsフォームへのハンドルを使用してインスタンスを作成することで正常に実行されますが、次の方法でシステムの機能を確認する場合:
DDCAPS halCaps = new DDCAPS(), helCaps = new DDCAPS();
halCaps.dwSize = (uint)Marshal.SizeOf(typeof(DDCAPS));
helCaps.dwSize = halCaps.dwSize;
result = dDraw.GetCaps(out halCaps, out helCaps);
「パラメーターが正しくありません」という例外が発生します。これをコメントアウトすると、後の関数でもこの例外が発生し、PInvoke のどこかに問題があると思われますが、CE5.0 DirectDraw に関する情報が非常に限られているように見えるため、どこを検索すればよいかわかりません。現在、関数をインポートしています
[DllImport("ddraw.dll", CallingConvention = CallingConvention.Winapi)]
ただし、エラーは次のようなインターフェイスからのみ発生するようです
[Guid("9c59509a-39bd-11d1-8c4a-00c04fd930c5"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
私がフォローしている記事で、これまでで最高の結果が得られたもの (および、ベースラインとして試みたコードを使用している記事) はこちらです。私のコードは以前は異なっていましたが、コードの何かに問題があるかどうかを確認するために着実に変更を加えてきたので、現時点では実質的に同じです。
問題の原因、CE5.0 を介して DirectDraw に関する情報を探す必要がある場所、または私がひどく間違っていることへのポインタについての支援をいただければ幸いです。
追加情報: 私が取り組んでいるデバイスは、D3D がオプションではないカスタム フレームワークですが、DirectDraw がサポートされ、2D ハードウェア アクセラレーションが利用可能であるというボード メーカーからの情報があるため、問題にはなりません。