Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с передачей указателя на функцию.

11K
04 июня 2005 года
Pyro_Red
3 / / 04.06.2005
Проблема в следующем.
Есть написанный мной класс с названием 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 *'

Вопрос: можно ли с этим что-то сделать? Заранее спасибо.
3
04 июня 2005 года
Green
4.8K / / 20.01.2000
Цитата:
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 *'

Вопрос: можно ли с этим что-то сделать? Заранее спасибо.



1) не путай функцию с методом класса;
2) объяви метод класса статическим.

3.5K
07 июня 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by Green
1) не путай функцию с методом класса;
2) объяви метод класса статическим.


Можно обойти эту ошибку:
capSetCallbackOnFrame(GetSafeHwnd(), (void *)(long)capFrameCallback)

Но будет ли это работать???

3
07 июня 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Rubins
Можно обойти эту ошибку:
capSetCallbackOnFrame(GetSafeHwnd(), (void *)(long)capFrameCallback)

Но будет ли это работать???



Не сработает даже такое преобразование типов, получишь такую же ошибку при компиляции.

3.5K
07 июня 2005 года
Rubins
30 / / 16.06.2003
[QUOTE]Originally posted by Green
Не сработает даже такое преобразование типов, получишь такую же ошибку при компиляции.

(LRESULT CALLBACK CCapture::*m_capFrameCallback)(HWND hWnd, LPVIDEOHDR lpVHdr) =
&CCapture::capFrameCallback;

capSetCallbackOnFrame(GetSafeHwnd(), *(void **)&m_capFrameCallback)

и ошибки не будет.
3
07 июня 2005 года
Green
4.8K / / 20.01.2000
Цитата:
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)

то компилироваться будет, но это неработающий код.

Как сделать правильно я уже сказал выше: нужен статический метод.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог