| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > CallBack или как ее там... |
| Автор: VinSmile 23.1.2007, 01:29 |
| Доброго всем времени суток! Я пол часа лазил по поиску но так ничего и не нанашол А проблема у меня такая... Есть длл (моя длл) и есть прога которая ее использует... И вот мне нужно из длл вызвать функцию которая описана в порге которая ее использует. Судя из того что я нашол, тут должны использоваться колбек функции. Но вот только реализация описывалась только со стороны приложения... А как это реализовано в самой длл? Я очень вас прошу написать пару пустых функций демонстрирующих эту взаимосвязь. Тоесть: 1) Что нужно передать в длл. 2) Как правильно описать функцию для вызова из длл. 3) Ну и как именно ее вызвать. Очень надеюсь на вашу помощь!!! |
| Автор: casey 23.1.2007, 10:00 | ||||||||||||
| Да, тут надо использовать callbackи, но ты должен иметь ввиду, что данная длл-ка может использоваться только одним процессом. Я когда-то это писал, поэтому вырежу пример из готовой проги: *.exe :
- это нужно для передачи адреса каллбэк-функции в длл 2)
сама каллбэк ф-ция 3) Перед вызовом каллбэка из длл нужно передать ее адрес
*.dll 1)
- объявления 2)
- получение и сохранение адреса для последующего вызова 3)
- сам вызов делается так Может чего забыл, не получится - пиши |
| Автор: VinSmile 23.1.2007, 21:35 |
| Огромнейшее спасибо!!! Суть полностью уловил!!! Поставил бы плюс в репу, но прав нехватает |
| Автор: VinSmile 14.2.2007, 19:09 | ||||||
| И опять я возвращаюсь к этой теме Вот код моего приложения: DLL
CPP
"H" (подключен и там и там)
когда коментю строку (*HookKeyProc)(code,wParam,lParam); все работает отлично, хук ставиться и при любом нажатии/отпускании клавиши (для любого окна) весело выскакивает меседжбокс, но вот только стоит ее вернуть на место..... Для окна срабатывает, а потеряю его с фокуса, раз сработает, я закрываю меседжбокс, и все, даже при востановлении фокуса ничего не работает... Вот так |
| Автор: dumb 15.2.2007, 04:26 |
и не будет. callback имеет смысл только в пределах адресного пространства твоей программы. а SetWindowsHookEx подгружает твою dll во все(почти) процессы - в их адресных пространствах адрес твоей функции ничего не значит. в данном случае для общения dll с основной программой нужно воспользоваться каким-либо IPC. например - сообщениями, разделяемыми секциями... ps. фпоиск по "SetWindowsHookEx WH_KEYBOARD". |
| Автор: dumb 15.2.2007, 16:32 |
| IPC = Interprocess Communications да. SendMessage/PostMessage разделяемые секции(MMF-memory mapped files): CreateFileMapping, MapViewOfFile, OpenFileMapping |
| Автор: VinSmile 15.2.2007, 21:42 |
| Ок... Спасибо! Буду смотреть |