作为winAPI回调的类方法

Ale*_*rty 3 c++ winapi

将winAPI消息回调函数设置为类的方法是否可行.如果是这样,这将如何最好地实施?我想知道它是否有可能.

很抱歉这个简短的问题,希望您能够提供有用的回复.

提前致谢 :).

sbi*_*sbi 7

您不能将非static成员函数用于C回调.

但是,通常C回调都有一个用户数据指针,该指针被路由到回调.可以通过static成员函数帮助您进行操作:

// Beware, brain-compiled code ahead!

typedef void (*callback)(int blah, void* user_data);

void some_func(callback cb, void* user_data);

class my_class {
public:
  // ...
  void call_some_func()
  {
     some_func(&callback_,this);
  }
private:
  void callback(int blah)
  {
    std::cout << blah << '\n';
  }
  static void callback_(int blah, void* user_data)
  {
    my_class* that = static_cast<my_class*>(user_data);
    that->callback(blah);
  }
};
Run Code Online (Sandbox Code Playgroud)