如何访问带有静态回调的对象属性

How to Access Object Properties w/ Static Callback?

本文关键字:回调 静态 对象 属性 何访问 访问      更新时间:2023-10-16

描述:

我对第三方库有一个问题,该库称为TVIDEOGRABBER。当我将函数的地址传递到库时,我将失去对回调方法的myClass方法和属性的访问。

m_pAPI->SetCallback(OnCallback);

上面的这条线将OnCallback地址传递给API。一旦API在具有更新时调用OnCallback方法。到目前为止,这很好。

有问题的行:

a->SetA(api->GetNumber());

我知道上面的语法不正确,但是它应该说明我要做的事情,我想从API设置A的值。

问题:

当API调用onCallback函数时,发件人是M_PAPI对象的地址,我无法访问myClass对象。

问题:

我如何访问myClass对象

这是一个完整的代码示例:

void MyClass::OnCallback(void* Object, void* sender) 
{
     API* api = (API*)(sender);
    // NO ACCESS TO MyClass properties or methods :( 
    a->SetA(api->GetNumber());  
}
class MyClass
{
    public:
          MyClass();
          ~MyClass();
          static void CALLBACK OnCallback(void* Object, void* sender);
          void SetA(int a);
          int GetA() const;
    private:
          API* m_pAPI;
          int a;  
}
MyClass::MyClass()
      : a(0)
{
    m_pAPI = new API;
    // Register for callbacks
    m_pAPI->SetCallback(OnCallback);
}
MyClass::~MyClass()
{
    delete m_pAPI;
}
int main()
{
    MyClass my;
    std::cout << "Value from API is " << my.GetA();
    return 0;
}

预先感谢!期待您的答复!

尝试替换:

m_pAPI = new API;

m_pAPI = new API(this);

这将使用TVIDEOGRABBER的CVIDEOGRABBER类的第二个构造函数。H:

CVideoGrabber (void* classPtr); 

和类的实例指针将由回调事件的"发送者"参数返回。