C ++ функция обратного вызова - PullRequest
1 голос
/ 18 ноября 2011

Я устанавливаю таймер с помощью функции afxwin SetTimer.Эта функция получает три параметра, один из которых является функцией обратного вызова.

Я установил функцию обратного вызова в классе (давайте назовем ее NS) и попытался передать ее в качестве аргумента.Однако компилятор жалуется, что это:

void (__stdcall NS::*) (HWND, UINT, UINT_PTR, DWORD);

- это не то же самое, что:

void (__stdcall *) (HWND, UINT, UINT_PTR, DWORD);

Что мне делать?

1 Ответ

4 голосов
/ 18 ноября 2011

Сделать функцию static*. В противном случае это даже не функция, а функция member , которая является совершенно другим животным. Более того, в противном случае не имеет смысла «передавать функцию в классе как обратный вызов», как вы выразились: нестатическая функция-член связана с состоянием экземпляра объекта этого класс.

(Также, ищите этот сайт, этот вопрос задавался миллион раз, и есть много хороших альтернатив, разбросанных по всему SO.)

*) Как указывает @James, этого недостаточно, если функция обратного вызова имеет интерфейс C, и в этом случае вам также необходима бесплатная extern "C" функция-обертка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...