Как получить доступ к свойствам объекта со статическим обратным вызовом?

Описание:

У меня проблема со сторонней библиотекой, эта библиотека называется TVideoGrabber. Когда я передаю адрес своей функции в библиотеку, я теряю доступ к методам и свойствам MyClass из метода обратного вызова.

m_pAPI->SetCallback(OnCallback);

Эта строка выше передает адрес OnCallback API. Однажды API вызывает метод OnCallback при обновлении. Это работает отлично до сих пор.

Строка, о которой идет речь:

a->SetA(api->GetNumber());

Я знаю, что приведенный выше синтаксис неверен, но он должен иллюстрировать то, что я пытаюсь сделать, я хотел бы установить значение A из 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;
}

Заранее спасибо! Ждем ваших ответов!

0

Решение

попробуйте заменить:

m_pAPI = new API;

от:

m_pAPI = new API(this);

это будет использовать 2-й конструктор класса CVideoGrabber из TVideoGrabber.h:

CVideoGrabber (void* classPtr);

и указатель экземпляра вашего класса будет возвращен параметром «отправителя» событий обратного вызова.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector