我正在使用需要传入回调函数的 API,但它不支持任何用户定义的参数来传递对象指针。
从我的静态/外部“C”回调函数中恢复对象的选项是什么?
我正在使用SetAbortProc()
,它需要一个 HDC 并传递给AbortProc()
回调。不幸的是,我看不到任何将更多数据与 HDC 相关联的方法。
我能想到的解决方案:
- 使用全局 Cls *my_abort_object
应该可以工作,因为一次只能激活一个打印作业。这似乎有点草率,但也许这只是我? - 使用全局 std::map<HDC, Cls*>
对我来说可能没用,因为只能激活一个打印作业。全局指针解决方案更简单,在这种情况下没有缺点。 - 使用一个封装整个中止事物的单例
可能是最明智的方法,无需太多工作。 - 使用 ATL 风格的 thunk
(这基本上是运行时生成的代码,它调用real_callback(HARDCODED_OBJ_PTR, cb_arg1, cb_arg2, ...);
作为回调函数传入的代码)。
会很好,但很难自己做,数据执行预防有问题等。框架可以做的事情,你不能轻易模仿。
我目前倾向于单例解决方案,因为它似乎是最干净的,没有太多开销。我会很感激任何建议!
额外信息:使用 MSVC Espress 2010 进行 C++ Win32 编程