我正在使用我需要传递回调函数的API,但它不支持任何用户定义的参数来传递对象指针。
从静态/外部“C”回调函数中恢复对象有哪些选择?
我正在使用SetAbortProc()
,它接受HDC并传递给AbortProc()
回调。不幸的是,我认为没有办法将更多数据与HDC联系起来。
我能想到的解决方案:
real_callback(HARDCODED_OBJ_PTR, cb_arg1, cb_arg2, ...);
该代码作为回调函数传入。)
会非常好但很难自己做,有数据执行预防等问题。框架可以做的事你不能轻易模仿。我目前倾向于单身人士解决方案,因为它看起来最干净而没有太多的开销。我很感激任何建议!
额外信息:使用MSVC Espress 2010进行C ++ Win32编程
答案 0 :(得分:1)
如果你想要一个稍微强大的解决方案,我会继续寻找一个命名空间级别的API,它包含一个单独的map
HDC
- > class*
关系。如果你需要多个HDC环境中的功能,那么你会很高兴。我认为公共API与SetAbortProc()
非常相似,但它也会为每个HDC创建并映射相应的处理程序对象。
因为你只需要一个HDC,所以只需要使用一个全局指针(带有某种断言/常量,这样它就不会发生变异),并依赖于你获得中止回调时的设置。
答案 1 :(得分:-1)
有悲伤地看到的API与回调不允许用于用户数据,该数据总是限制到其他用户。如果遇到它,我会亲自动摇使用单件类型。
可能你应该向API的开发者报告这个。您还可以发现,如果您可以在回调中访问API中的对象,那么有时他们的架构的其他部分可能会将您的指针/数据戳入其中,在我看来,向开发人员寻求帮助是最好的选择。你甚至可以帮助自己帮助他们。