Как вывести результат из dll (Delphi)
По статистике 99,99% программистов неправильно ставят глобальные хуки. Нельзя вызывать CallNextHookEx(H,... поскольку переменная H не инициализирована. Строка H:= SetWindowsHookEx(WH_MOUSE, @Hook, hInstance, 0); инициализирует H только в процессе поставившем хук. Но при срабатывании хука, винда подгружает твою dll'ку к чужому процессу и в этой копии твоей dll'ки H не инициализирован! Эта ошибка встерчается настолько часто, что начиная с windows 2000 (могу ошибаться) вместо H можно передавать нуль.
Таким образом, оператор присваивания GHw изменяет эту переменную только в чужом процессе, а в процессе поставившем хук она остается неизменной. Для передачи данных между копиями dll'ки в подобных случаях используют файлы отображаемые в память.
А вот с этого места не понятно:
Для передачи данных между копиями dll'ки в подобных случаях используют файлы отображаемые в память.Мне не между копиями, а из dll в вызывающую программу надо передать переменную.
Так как же мне вывести переменную, содержащую хендл, из dll в вызывающую программу?
Можно конкретнее на моём же примере показать как это делать?
В общем, я вроде разобрался. Спасибо за задание правильного направления действий.
Оставить комментарий
dimon72
Делаю глобальный Хук через dll:Пытаюсь передать найденный Хендл окна через дополнительную функцию, которая описана в дополнительном Unit'е этой же библиотеки:
Вот код вызывающего приложения:
Когда пытаюсь передать во вспомогательную ф-цию GetHWnds найденный хендл, то прога падает. Что я делаю не так?
Смысл задачи заключается в том, что надо вывести полученный после клика мыши хендл любого окна из dll в вызывающую delphi-программу.