0

描述:

我遇到了第 3 方库的问题,该库称为 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;
}

提前致谢!期待您的回复!

4

1 回答 1

1

尝试替换:

m_pAPI = new API;

经过:

m_pAPI = new API(this);

这将使用 TVideoGrabber.h 中 CVideoGrabber 类的第二个构造函数:

CVideoGrabber (void* classPtr); 

并且您的类实例的指针将由回调事件的“sender”参数返回。

于 2012-12-22T23:02:59.053 回答