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