说明
我遇到了第三方库的问题,这个库名为TVideoGrabber。当我将函数的地址传递给库时,我无法从回调方法访问MyClass方法和属性。
m_pAPI->SetCallback(OnCallback);
上面这一行将OnCallback地址传递给API。一旦API在更新时调用OnCallback方法。到目前为止,此工作正常。
有问题的一行:
a->SetA(api->GetNumber());
我知道上面的语法不正确,但它应该说明我正在尝试做什么,我想从API设置A的值。
问题:
当API调用OnCallback函数时,sender是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;
}
提前致谢!期待您的回复!
答案 0 :(得分:1)
尝试替换:
m_pAPI = new API;
由:
m_pAPI = new API(this);
这将使用TVideoGrabber.h中的CVideoGrabber类的第二个构造函数:
CVideoGrabber (void* classPtr);
并且类的实例的指针将由回调事件的“sender”参数返回。