LRESULT (CALLBACK CCapture::*m_capFrameCallback)(HWND hWnd, LPVIDEOHDR lpVHdr) = CCapture::capFrameCallback;
capSetCallbackOnFrame(GetSafeHwnd(), *(void**)&m_capFrameCallback)
Проблема с передачей указателя на функцию.
Есть написанный мной класс с названием CCapture.
В нем создана фунция:
LRESULT CALLBACK CCapture::capFrameCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
В этом же классе, но уже в другой функции я пытаюсь зарегистрировать эту callback функцию таким образом:
capSetCallbackOnFrame(GetSafeHwnd(), capFrameCallback)
Компилятор выдает следующую ошибку:
error C2440: 'type cast' : cannot convert from 'long (__stdcall CCapture::*)(struct HWND__ *,struct videohdr_tag *)' to 'void *'
Вопрос: можно ли с этим что-то сделать? Заранее спасибо.
Цитата:
Originally posted by Pyro_Red
Проблема в следующем.
Есть написанный мной класс с названием CCapture.
В нем создана фунция:
LRESULT CALLBACK CCapture::capFrameCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
В этом же классе, но уже в другой функции я пытаюсь зарегистрировать эту callback функцию таким образом:
capSetCallbackOnFrame(GetSafeHwnd(), capFrameCallback)
Компилятор выдает следующую ошибку:
error C2440: 'type cast' : cannot convert from 'long (__stdcall CCapture::*)(struct HWND__ *,struct videohdr_tag *)' to 'void *'
Вопрос: можно ли с этим что-то сделать? Заранее спасибо.
Проблема в следующем.
Есть написанный мной класс с названием CCapture.
В нем создана фунция:
LRESULT CALLBACK CCapture::capFrameCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
В этом же классе, но уже в другой функции я пытаюсь зарегистрировать эту callback функцию таким образом:
capSetCallbackOnFrame(GetSafeHwnd(), capFrameCallback)
Компилятор выдает следующую ошибку:
error C2440: 'type cast' : cannot convert from 'long (__stdcall CCapture::*)(struct HWND__ *,struct videohdr_tag *)' to 'void *'
Вопрос: можно ли с этим что-то сделать? Заранее спасибо.
1) не путай функцию с методом класса;
2) объяви метод класса статическим.
Цитата:
Originally posted by Green
1) не путай функцию с методом класса;
2) объяви метод класса статическим.
1) не путай функцию с методом класса;
2) объяви метод класса статическим.
Можно обойти эту ошибку:
capSetCallbackOnFrame(GetSafeHwnd(), (void *)(long)capFrameCallback)
Но будет ли это работать???
Цитата:
Originally posted by Rubins
Можно обойти эту ошибку:
capSetCallbackOnFrame(GetSafeHwnd(), (void *)(long)capFrameCallback)
Но будет ли это работать???
Можно обойти эту ошибку:
capSetCallbackOnFrame(GetSafeHwnd(), (void *)(long)capFrameCallback)
Но будет ли это работать???
Не сработает даже такое преобразование типов, получишь такую же ошибку при компиляции.
Не сработает даже такое преобразование типов, получишь такую же ошибку при компиляции.
(LRESULT CALLBACK CCapture::*m_capFrameCallback)(HWND hWnd, LPVIDEOHDR lpVHdr) =
&CCapture::capFrameCallback;
capSetCallbackOnFrame(GetSafeHwnd(), *(void **)&m_capFrameCallback)
и ошибки не будет.
Цитата:
Originally posted by Rubins
(LRESULT CALLBACK CCapture::*m_capFrameCallback)(HWND hWnd, LPVIDEOHDR lpVHdr) =
&CCapture::capFrameCallback;
capSetCallbackOnFrame(GetSafeHwnd(), *(void **)&m_capFrameCallback)
и ошибки не будет.
(LRESULT CALLBACK CCapture::*m_capFrameCallback)(HWND hWnd, LPVIDEOHDR lpVHdr) =
&CCapture::capFrameCallback;
capSetCallbackOnFrame(GetSafeHwnd(), *(void **)&m_capFrameCallback)
и ошибки не будет.
Ну если подправить некоторые синтаксические ощибки
Код:
то компилироваться будет, но это неработающий код.
Как сделать правильно я уже сказал выше: нужен статический метод.