0
我在与第三方库的问题
,该库被称为TVideoGrabber。当我将函数的地址传递给库时,我无法从回调方法访问MyClass方法和属性。
m_pAPI->SetCallback(OnCallback);
上面这行代码将OnCallback地址传递给API。一旦API有更新时调用OnCallback方法。迄今为止,这工作得很好。
有问题的行:
a->SetA(api->GetNumber());
我知道,上面的语法不正确,但应说明什么,我试图做的,我想设置一个从价值API。
问题:
当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;
}
先谢谢了!期待您的回复!
为此,api和myclass之间必须有一些连接。典型的情况是它与OnCallback一起被传入。或者可能该“this”被保存为SetCallback的一部分并作为“对象”传递。但是对于给定的代码,这是不可能说的。 –
如果他们有SetCallback(),他们应该有SetSender()或SetCallBackSender()。通常,当SetCallback在第三方API中定义时,它有两个参数:CallBack函数指针和发送者的void * – cha