描述:
我遇到了第 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;
}
提前致谢!期待您的回复!