Название: Отладка DLL с хуком Отправлено: QuAzI от Январь 08, 2012, 03:04 Нашкрябал простенькую DLL с main и процедуркой-хуком. Скормил её основной проге через QLibrary. Всё, библиотечка подгружается, функция из неё получается, хук устанавливается (соответственно всё имеет ненулевые адреса и вроде как всё красиво). Но даже элементарный qDebug() библиотека не возвращает, хотя само приложение в qDebug() возвращает всё-всё, даже когда отладку запускаю из проекта библиотеки (скопировал туда бинарник и в параметрах запуска указал его). Как же тогда отлаживать DLL?
И второй вопрос: как бы между приложением и библиотекой организовать обмен данными, есть у Qt что-то в этом плане или дёргать родные методы каждой ОС самому? Название: Re: Отладка DLL с хуком Отправлено: Bepec от Январь 08, 2012, 05:15 Организуй простой вывод в лог к примеру. Насколько я помню, QDebug выводит данные в консоль по умолчанию, если не переопределено, а консоль у дллки ты видимо фиг откроешь. :)
Название: Re: Отладка DLL с хуком Отправлено: merke от Январь 08, 2012, 06:19 Отлаживать библиотеки очень тяжело, я в основном использую в графических приложениях месагбоксы, я в консольных логирование. Если библиотека срет в консоль, то её вывод должен отображаться в консоли родительского приложения. Насчет взаимодействия я посоветую использовать СИГНАЛЫ и СЛОТЫ.
Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 08, 2012, 18:33 Ну, вроде в файл всё ложится нормально, а вот как в винде между разными приложениями сигналы/слоты Qt выглядят я немного плохо представляю. В экземпл никто не потычет?
Название: Re: Отладка DLL с хуком Отправлено: merke от Январь 08, 2012, 18:36 Между разными не получится, хотя где то видел подобную реализацию здесь на форуме. Тебе нужно следующее если у тебя приложение в которое ты подключаешь библиотеки на Qt да и сами либы написаны тоже на Qt то подобное ты сможешь реализовать легко, главное наследоваться от QObject
Название: Re: Отладка DLL с хуком Отправлено: merke от Январь 08, 2012, 18:42 Что то типо этого
Код
А в либе делаешь простой публичный слот, в него будешь передавать данные из основного приложения, и сигнал, его будешь испускать и ловить в главном приложении Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 09, 2012, 14:37 А в либе публичный слот зачем? Мне надо что-то из куха возвращать. Словил нужное событие - передал приложению. В общем всё равно плохо догоняю, во что на винде сигналы/слоты транслируются. Думаю, стоит запилить нужный функционал в самой либе и не маяться.
Название: Re: Отладка DLL с хуком Отправлено: mutineer от Январь 09, 2012, 14:53 В общем всё равно плохо догоняю, во что на винде сигналы/слоты транслируются. Транслируются в вызовы методов-слотов или в передачу QEvent в QEventLoop с последующим вызовом метода-слота Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 09, 2012, 17:09 В общем сделал всё нужное в либе, осталось только выводить поверх чужого приложения меню с вариантами выбора действия. Но ни меню, ни даже сообщение QMessageBox::critical(0, "dll", "error"); не могу вывести, текущее приложение сразу падает (при этом моё приложение из которого крутится DLL продолжает работать и валить окна, где срабатывает хук).
Название: Re: Отладка DLL с хуком Отправлено: Igors от Январь 09, 2012, 18:32 Может это и "не тот случай" но если речь о Вындоуз, то оба (exe и dll) должны быть скомпилены однообразно: напр exe как Multithreaded DLL - значит и dll так же. Если используется STL то дефайны для них должны быть теми же и.т.д.
Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 09, 2012, 19:03 Никаких мультитредов и прочего. Вроде как нужно сварганить QApplication, но еик параметры надо argc/argv.
Это работает Код: MessageBox(active, L"Join us at Inferno Dev!", L"DLL Message", MB_OK | MB_ICONINFORMATION); Код: QMessageBox::critical(0, "dll", "error"); Название: Re: Отладка DLL с хуком Отправлено: Bepec от Январь 10, 2012, 08:51 А ты случаем, не из dll ки пытаешься вызвать окно GUI?
Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 11, 2012, 09:22 Случаем из. Ведь тема про DLL.
Решение траблы примерно такое: Берём qmfcapp.h и qmfcapp.cpp из Qt Solutions Код: BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { Название: Re: Отладка DLL с хуком Отправлено: QuAzI от Январь 13, 2012, 12:29 Долбанный QMfcApp натыкал палок в колёс, несколько дней не мог понять, что происходит.
Нифига оно не успевает синхронизироваться с собственным eventFilter, после пары отображений QMenu процесс вешался. Натыкал для отладки в каждую строчку по qDebug() перенаправленный в файл (http://www.prog.org.ru/index.php?topic=14673.msg96196#msg96196), чем получил кучу мелких задержек которых вдруг хватило чтобы на конкретно моей машине оно успевало отработать. Осталось ещё понять, почему в приложении офиса например выдаёт по 4 раза событие WM_KEYUP и покурить талмуды на тему, как правильно отвязаться от всех процессов. Т.к. хук автоматически подгружает библиотеку в каждый словленный процесс, много возни с отключением этих бубнов даже чтобы просто перекомпилять библиотеку во время отладки. Если кто будет с хуками ковыряться, нашёл несколько полезных статеек http://www.rsdn.ru/article/baseserv/hookdll.xml http://www.rsdn.ru/article/baseserv/HookTools.xml Там правда вылез вопрос с тем что MinGW не умеет #pragma, но вроде уже показали (http://www.prog.org.ru/topic_20589_0.html;topicseen) где что поправить |