gpt4 book ai didi

C++:在回调中恢复对象指针(API 不支持 user_data 指针)

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:48 24 4
gpt4 key购买 nike

<分区>

我正在使用需要传入回调函数的 API,但它不支持任何用户定义的参数来传递对象指针。

从静态/外部“C”回调函数中恢复对象有哪些选择?

我正在使用 SetAbortProc() ,它采用 HDC 并传递给 AbortProc() 回调。不幸的是,我看不到任何方法可以将更多数据与 HDC 相关联。

我能想到的解决方案:

  • 使用全局 Cls *my_abort_object
    应该工作,因为一次只能激活一个打印作业。看起来有点草率,但也许这就是我的想法?
  • 使用全局 std::map
    对我来说可能没用,因为只有一个打印作业可以激活。全局指针解决方案更简单,在这种情况下没有缺点。
  • 使用一个封装整个中止事件的单例
    可能是不需要太多工作的最明智的方法。
  • 使用 ATL 风格的 thunk
    (这基本上是运行时生成的代码,调用 real_callback(HARDCODED_OBJ_PTR, cb_arg1, cb_arg2, ...); 该代码作为回调函数传入)。
    会很好,但你自己很难做到,数据执行预防等方面存在问题。框架可以做到但你无法轻易模仿的事情。

我目前倾向于单例解决方案,因为它看起来最干净而且没有太多开销。如果有任何建议,我将不胜感激!

额外信息:使用 MSVC Espress 2010 进行 C++ Win32 编程

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com