Как преобразовать указатель функции-члена в тип TIMERPROC для использования с WINAPI SetTimer? Фрагмент кода ниже показывает, как я это делаю сейчас, но при компиляции я получаю эту ошибку:
ошибка C2664: «SetTimer»: невозможно преобразовать параметр 4 из «void (__stdcall CBuildAndSend::*) (HWND, UINT, UINT_PTR, DWORD)» в «TIMERPROC»
Обратный вызов должен быть привязан к исходному экземпляру класса. Если есть лучший способ сделать это, я весь внимание. Спасибо.
class CMyClass
{
public:
void (CALLBACK CBuildAndSend::*TimerCbfn)( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime );
private:
void CALLBACK TimeoutTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime );
};
CMyClass::CMyClass()
{
...
this->TimerCbfn = &CBuildAndSend::TimeoutTimerProc;
...
::CreateThread(
NULL, // no security attributes
0, // use default initial stack size
reinterpret_cast<LPTHREAD_START_ROUTINE>(BasThreadFn), // function to execute in new thread
this, // thread parameters
0, // use default creation settings
NULL // thread ID is not needed
)
}
void CALLBACK CMyClass::TimeoutTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
{
...
}
static DWORD MyThreadFn( LPVOID pParam )
{
CMyClass * pMyClass = (CMyClass *)pParam;
...
::SetTimer( NULL, 0, BAS_DEFAULT_TIMEOUT, pMyClass->TimerCbfn ); // <-- Error Here
...
}