コールバック関数を渡す必要がある API を使用していますが、オブジェクト ポインターを渡すためのユーザー定義パラメーターをサポートしていません。
static / extern "C" コールバック関数からオブジェクトを回復するオプションは何ですか?
SetAbortProc()
HDC を受け取り、コールバックに渡す を使用していAbortProc()
ます。残念ながら、それ以上のデータを HDC に関連付ける方法はありません。
私が考えることができる解決策:
- グローバル Cls *my_abort_object を使用し
ます。一度にアクティブにできる印刷ジョブは 1 つだけなので、機能するはずです。少しずさんなように見えますが、それは私だけでしょうか? - グローバルな std::map<HDC, Cls*> を使用
してください。アクティブにできる印刷ジョブは 1 つだけなので、おそらく役に立たないでしょう。この場合、グローバル ポインター ソリューションの方が簡単で、欠点はありません。 - 中止するもの全体をカプセル化するシングルトンを使用してください
。おそらく、あまり手間をかけない最も健全なアプローチです。 - ATL スタイルのサンクを使用
します (これは基本的real_callback(HARDCODED_OBJ_PTR, cb_arg1, cb_arg2, ...);
に、コールバック関数として渡されたコードを呼び出すランタイム生成コードです)。
非常に素晴らしいですが、自分で行うのは難しく、データ実行の防止などに問題があります。フレームワークでできることを簡単にエミュレートすることはできません。
私は現在、オーバーヘッドがあまりない最もクリーンなシングルトン ソリューションに傾倒しています。提案をいただければ幸いです。
追加情報: MSVC Espress 2010 を使用した C++ Win32 プログラミング