如何访问带有静态回调的对象属性
How to Access Object Properties w/ Static Callback?
描述:
我对第三方库有一个问题,该库称为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);
和类的实例指针将由回调事件的"发送者"参数返回。
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 类 Referention 中C++回调函数引用非静态函数
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 将非静态函数绑定到回调时出现问题
- 如何进行静态回调 c++
- 将非静态成员函数作为回调传递
- 如何在sqlite中对C 进行非静态回调
- 将静态成员函数绑定为回调
- 成员静态回调函数的外部"C"
- 如何访问带有静态回调的对象属性
- 我的wlanregisternotification回调仅在回调为静态时工作
- 通过C++中的非静态函数设置对C函数指针的回调
- 不同类之间的非静态函数的C++回调
- 当使用来自c的回调接口时,避免在c++中使用静态成员函数
- 如何实现一系列使用非静态类字段的类成员回调
- 设置一个回调函数,该函数是类的非静态成员函数
- 在C++中使用派生类的静态方法作为函数回调