0

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 ハードウェア アクセラレーションが利用可能であるというボード メーカーからの情報があるため、問題にはなりません。

4

1 に答える 1

0

同様の問題を抱えている他の人のためにこれをここに置きます。C++ コードをしばらく調べたところ、CE5.0 は 6.0+ とは異なる変数と関数を使用しているように見えます。そのため、IDirectDraw や IDirectDrawSurface4 から変換する必要がある IDirectDrawSurface5 ではなく、IDirectDraw4 などを使用する必要があります。

同様の問題を抱えている他の人にとって、これが有用な情報であることを願っています。このコードですべての問題を修正したわけではありませんが、始めるには良い場所です。

于 2010-12-07T19:33:32.787 に答える