zenden2k
@zenden2k
PHP & C++ programmer

Работающий вариант C++ thunk (указатель на функцию-член класса как C-style callback)?

Есть такая замечательная WINAPI функция SetWindowsHookEx. Проблема в том, что сигнатура коллбэка, которую принимает эта функция, такая:
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam);


Как видите, user-defined параметра, через который можно было бы передать this, нет.

Вот что я нашел, только оно не работает:
zabkat.com/blog/hook-callback-thunk-x64.htm
www.codeproject.com/Articles/16785/Thunking-in-Win...
www.codeproject.com/Articles/6731/Using-class-meth...
dj9okeyxktdvd.cloudfront.net/Articles/5717/Better-...

Вторая ссылка как-раз таки про мою проблему с SetWindowsHookEx, но оно вылетает.
Другой вариант, который я пробовал, съедает первый аргумент функции, потому что заточен под WindowProc.

Я временно решил проблему введением статической переменной, но это не выход.
Хотелось бы решить эту проблему раз и навсегда и для всех функций.
  • Вопрос задан
  • 304 просмотра
Пригласить эксперта
Ответы на вопрос 2
zenden2k
@zenden2k Автор вопроса
PHP & C++ programmer
Чувствую, что ответа я не дождусь, пока остановился на этом:
p-nand-q.com/programming/cplusplus/using_member_fu...
Ответ написан
Комментировать
@ivanpizhenko
Software Engineer
Почему бы не сделать глобальную переменную-"реестр" коллбеков и в lparam передавать ключ по которому можно найти коллбек? что-то типа std::map g_Callbacks;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы