Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› указатель на функцию в С++
Посл.ответ Сообщение

Ранг: 53.8 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 ноября 2006 03:57
· Личное сообщение · #1

Есть такая функция Win API:
SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) Функция для установки хуков.Кто знают, те в курсе.
Так вот, второй праметр - это указатель на процедуру хука.Вопрос такой, как задать этот параметр указателем на функцию типа LRESULT CALLBACK KeyHook которая описана и реализована в данном коде, и не находится в DLL? Т.е. интересует указатель на функцию типа LRESULT CALLBACK. Реализация кода идет в Borland builder c++.



Ранг: 45.7 (посетитель), 5thx
Активность: 0.020
Статус: Участник

Создано: 30 ноября 2006 04:40
· Личное сообщение · #2

Ну если ты не хочешь задовать функцию с таким протатипом как надо и хочешь передать вообще свою.... (зачем ндао не понятно но не суть) то просто укажи компилятору что мол так и надо кодом вида....

SetWindowsHookEx( idHook, (HOOKPROC)my_func, hMod, dwThreadId);

my_func любая функция....

Тогда компилятор не ругнеться... если прототипы функций не совпадут .



Ранг: 53.8 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 ноября 2006 04:47
· Личное сообщение · #3

Fallout

ставлю, выдает ошибку:Improper use of typedef 'LRESULT'
Я так понимаю указатель на функцию типа LRESULT CALLBACK какой-то другой.Собственно это указатель проге обрабатывать входящие события, данной функцией.



Ранг: 19.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 ноября 2006 05:13
· Личное сообщение · #4

dimaxmaster пишет:
Я так понимаю указатель на функцию типа LRESULT CALLBACK какой-то другой

указатель на функцию определяется не только возвращаемым результатом, а и полным прототипом
все HOOKPROC должны иметь
typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);

ну и смотреть также на

lpfn
[in] Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread created by a different process, the lpfn parameter must point to a hook procedure in a DLL. Otherwise, lpfn can point to a hook procedure in the code associated with the current process.

hMod
[in] Handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.

dwThreadId
[in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.



Ранг: 53.8 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 ноября 2006 05:58
· Личное сообщение · #5

Fallout

thnx, подкинул толковую идею,я разобрался
SetWindowsHookEx( idHook, (HOOKPROC)my_func, hMod, dwThreadId);
где my_func - любая функция - верно. Просто указывал имя с скобками (). Глупил, надо без скобок и все работает.

amely
Все верно, но другие параметры были у меня прописаны, я их знал. Проблема была именно с указателем на функцию.
Тему закрываю.


 eXeL@B —› Программирование —› указатель на функцию в С++
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати