c++ 注册 c 语言回调
最近在做项目遇到了一个问题,我使用c++ class 调用c语言写得一个so注册回调,然后这个c 的so ,callback 通知c++ 类。
test.h
class test{
public:
test();
void functionCallback(int type, int size, void *data);
private:
struct dsi_registry_listener instrumentListener; //c so 提供的一个struct,主要就是保存函数指针
};
c 提供的头文件
struct dsi_registry_listener
{
void( *dsi_data_recv_cb )(int id, int data_size, void *data);
}
test.cpp
test() {
instrumentListener.dsi_data_recv_cb = functionCallback;
}
但是在编译的时候报错了,如下reference to non-static member function must be called,应该就是说c回调c++的方法要是static的,那这样就不好处理了,于是就有了下面的方法。
test.cpp
std::function<void(int type, int size, void *data)> cFunctionCallback;
extern "C" {
void cFunctionCallbackWrapper(int type, int size, void *data) {
if (cFunctionCallback) {
cFunctionCallback(type, size, data);
}
}
}
test() {
cFunctionCallback= std::bind(&test::functionCallback, this,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
}
以上的目的就是注册的将非test class内的方法注册到 c so中去,然后将这个方法和 test class进行一个bind,就由调回到了test class内,
function和bind不知道怎么使用自己搜一下。