![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
ERROR_HOOK_NEEDS_HMOD
Cannot set nonlocal hook without a module handle. вот такая вот ошибка уже съела мне моск код:
подскажите плиз |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
#pragma data_seg(".SHAREDDATA")
убери бяку попробуй. я вот так линвокал (при нахждении инстанса в .data):
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
ну я просто смерджил секции и дал нужные им права..
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
т.е мне надо только имена файлов поменять на свои, или все сложнее?
как-то сомневаюь, что в этом дело... ЗЫ забыл сказать - 3 компилятора пробовал - 2005-ый, 2008-ой и мингв |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
ilyuha, интересует как и где вызываешь SetHook? И как загружается твоя библиотека? Что мешает перенести установку данного хука в основное приложение (для хука данного типа ведь не обязательно dll использовать)?
P.S. На первый взгляд - вроде все правильно, хорошо бы отладчиком пройтись и посмотреть, чему равен hInstanсe на момент установки хука, вдруг он действительно нулевой? -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilyuha |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
ama_kid, Вызываю очень просто(просто тестовый проеккт маленький создал):
хы, не знал но, полюбому, раз уж начал - надо ведь разобратся |
||||
|
|||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
||||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
а проверить сначала hKeyBoardHook?
|
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
dumb, ммм... а смысл? ведь если вызов SetWindowsHookEx завершается ошибкой(что и наблюдается), она полюбому вернет NULL.
ЗЫ проверил - так и есть |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
нет, я про то, что глобальные низкоуровневые хуки WH_KEYBOARD_LL и WH_MOUSE_LL можно устанавливать непосредственно из приложения, для них не надо писать отдельную dll.
Ты проверил чему равно hInstance при установке хука? Ну вдруг мы чего-то не знаем про твою систему? -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
ama_kid, только что посмотрел - действительно 0
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
на сколько я сейчас помню, общая секция имеет имя ".shared" и переменные, которые в ней расположены, должны быть обязательно проинициализированы, т.е. в данном случае, hInstance не будет слинкована в этой секции
PS: ради инициализации hInstance в DllMain, switch не нужен, hModule ведь приходит корректный на все вызовы DllMain -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
GremlinProg, проинициализировал. результат тот же...
|
|||
|
||||
| GremlinProg |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
How do I share data in my DLL with an application or with other DLLs?
я же писал, убери свич для hInstance, или показывай код статической инициализации hInstance Добавлено через 5 минут и 47 секунд кстати, по поводу hInstance в общей секции:
т.е. даже если ты засунешь hInstance в шару, она будет меняться всякий раз, при отображении длл в очередной процесс, т.е. корректным останется только последний вызов, остальные после этого будут ссылаться на чужие hInstance таким образом, убери свитч и убери hInstance из шары, вытащи ее просто глобально, рядом с секцией -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||||
|
|||||||||||
| ilyuha |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
GremlinProg,
не совсем уверен, что я тебя правильно понял, но вот:
если да, то все-равно не пашет... Это сообщение отредактировал(а) ilyuha - 30.11.2008, 18:35 |
||||
|
|||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
ilyuha, я предполагаю, что засунув свой хук в dll, ты по сути сделал не совсем верно: при нахождении внутри dll этот хук вместо того, чтобы осуществлять переключение в контекст процесса, установившего хук, фактически осуществляет приаттачивание dll-ки к каждому процессу. Вполне возможно, у тебя из-за этого и получается нулевой hInstance, т.к. в контексте другого процесса он скорее всего портится другим значением (видимо, нулевым)... Если так уж хочешь использовать dll - то попробуй вместо WH_KEYBOARD_LL использовать просто WH_KEYBOARD (интересно самому, получится или нет, сам никогда его не использовал
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
безрезультатно не юзать длл? но ведь, заюзав поиск по форуму я видел, что многие юзают WH_KEYBOARD и WH_KEYBOARD_LL люди юзают и в длл.. чо за полтергейст?))) ну, и самое интересное: только что дал сорцы человеку, он отбилдил их(у него Виста х64) - ошибки этой нет(есть другая, но кассается она уже моего алгоритма...). ннарод, подскажите... моск уже рвется в клочья |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
ilyuha, а ты пробовал отлаживать свою dll? Я бы начал с того, что поставил бряк на PROCESS_ATTACH и посмотрел, когда и сколько раз происходит вызов библиотеки и попробовал отыскать момент, когда hInctance превращается в нуль...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
по ходу, народ, топчимся мы на одном месте - и вас я, похоже, в растеренность ввел и у самого идей нет...
в аттач кладу сорцы либы - посмотрите плиз ) Присоединённый файл ( Кол-во скачиваний: 6 )
MHlib.rar 16,97 Kb |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
парни, ну посмотрите пожалуйста... мне просто надо знать, запустится ли хук у других. может у меня с системой чо - уже всякие мысли
Это сообщение отредактировал(а) ilyuha - 2.12.2008, 17:40 |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
ilyuha, выявлены два нижеследующих замечания:
1) В конструкторе CursorIntervals::CursorIntervals() у тебя возникает ошибка "Использование неинициализированной переменной Conf". Соответственно, из-за этого у тебя рушился конструктор основного класса, т.к. обработки исключений нет... После добавления инициализации указателя NULL-ом при определении - все вроде стало нормально. 2) В хуковой процедуре - происходит неправильная обработка нажатий клавиш (собственно, ты обрабатываешь не то, что надо). Почитай про параметры LowLevelKeyboardProc. В общем, после второго замечания мне стало лень переделывать на правильный вариант -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
спасибо всем огромное(особенно ama_kid'у
кому не лень, поставте плиз за меня плюсик ama_kid'у(я не могу - постов мало) тему закрываю |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |