2009-04-10 1 views
1

シナリオはそうです:私の.dll/.soをロードし、別のポインタの状態を期待するたびに、その中から関数を複数回呼び出すことがあります。それは後でdllへの他の呼び出しのさまざまな状態を使用します。C++のdllから描画キャンバスを作成する最も簡単な方法は?

私が望むのは、各状態(ビジュアライゼーション、デバッグなど)のためのキャンバスウィンドウを作成するクロスプラットフォームの方法です。 )私はwxを試しましたが、それは簡単ではないように見えるので、それを保留にしました。それを行うためのすっきりとした小さなライブラリがありますか、それともWinAPI/Xと一緒に行くべきですか?

編集:ホストプログラムを変更できないとします。

答えて

1

Qt私の経験上、Wxよりもセットアップとドライブが簡単です。それは非常にクロスプラットフォームです。

QImageやQWidget型のものへのポインタを渡すことなく、DLL関数の中からいくつかのグラフィックスをレンダリングしたい場合は、おそらくOpenGLを使うことでしょう。あなたのDLLは、現在のOpenGLコンテキストにレンダリングするだけです。これはグローバルな状態であり、DLLの外で(多分QGLWidgetを使って)セットアップすることができます。

更新:ああ、あなたの編集がホストコードを変更できないことに気付きました。これは問題です。作成するウィンドウは、ホストアプリケーションのイベントループにプラグインして正しく動作する必要があります(たとえば、エクスポーズ/サイズ変更時にWM_PAINTを受け取るなど)。確かにWin32では、古いコード(ライブラリなど)をCreateWindowにしてGDIでその内容を描画することは可能ですが、一般的なウィンドウの動作はかなり壊れている可能性があります(Vistaのダブルバッファリングではまったく機能しないことがあります。私は試していない)。私がこの状況で最も簡単に見つけるのは、画像ファイルをダンプし、その後、選択した画像ビューアでレビューすることです。 IMHOこれは実際には、ライブやウィンドウをデバッグするのに役立ちます。バックグラウンドやフォワード、ズームイン、画像強調を適用してさまざまな問題を強調したり、回帰テストなどの前回と比較したりすることができるからです。 「ライブ」ビュー、新しい画像のディレクトリを監視する画像表示器を作成する、名前付きパイプなどを介してストリームする)

+0

dllの中からウィンドウを作成する方法の例があります...? – Baczek

0

SDLは単純なグラフィックとウィジェットを必要としないだけで使いやすいです。複雑なコントロールが必要な場合は、Qtを使用してください。

+0

はSDLを考えていない、それを試してみるだろう。 – Baczek

0

IUPをご覧ください。それは本当にうまくインターフェイスすると、そこに拡張DLLから完全に使用することができますので、そのC APIはDLLに何か他のプラグインから使用することができるようです。

IUPは、キャンバスを含む通常の疑わしい種類のコントロールを含むウィンドウを開くためのフレームワークを提供します。その関連ライブラリCDは、そのキャンバスでの通常の描画操作を行います。

現在のリリースは、Windowsと* nixの間で移植可能です。次のメジャーリリースはMacOSXもサポートします。

関連する問題