![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DevoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Доброго всем дня.
Работаю в Delphi 7. Есть com-сервер и клиент. В проекте с dll в Run -> Parameters -> Host Application выбираю своего клиента, жму F9, жму на клиентскую кнопочку по которой отрабатывает реализация функции одного из интерфейсов, в результате чего через некоторое время появляется окошко с информацией о том, что функция отработала и как бы все хорошо. Плохо то, что несмотря на брекпойнт поставленный в реализации этой функции, управление на него не передается в связи с чем отладка становится невозможна. В настройках проекта оптимизация отключена, секция Debugging заполнена полностью, галочки в EXE and DLL options проставлены. В Tools -> Debugger Options -> General стоит только одна галочка в Show Inherited. Stop on Delphi Exceptions отключена. Для сравнения потестил исходники которые идут вместе с книгой Кэнту к главе в которой рассказывается про com. Там все отлично - управление в отмеченных местах переходит в точки останова. Как думаете куда стоит копать? Спасибо. |
|||
|
||||
| DevoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Решил поэкспериментировать. Включил Tools -> Debugger Options -> General -> Enable COM cross-process support (от активности других ни холодно, ни жарко). Стартанул проект с сервером. Вылез CPU (process dllhost.exe), я пробежался F9 до конца, после чего нажал в клиенте на заветную кнопочку и управление передалось таки в реализацию. Вау. Закрыл все и запустил еще раз. Снова CPU, но в этот раз управление перешло в ntdll.RtlExitUserThread и, видимо, погибло там смертью храбрых, потому как делфи зависла, клиент завис, диспетчер не открывается, хотя что-то там все-таки слишком активно работало, т.к. можно было к примеру по альттабу переключиться на открытый текстовый файл, но происходило это крайне медленно. Перезагрузка и новая попытка отладки. Первый раз тож самое, хотя CPU удалось закрыть вместе с дельфи, несмотря на то, что она ругалась при этом на ряд bpl, во второй раз все снова конкретно подвисло и пришлось перезагружаться. После 5 повторов каждый из которых рано или поздно приводил к необходимости перезагрузки ситуация принципиально не изменилась. Странно, что самая первая попытка увенчалась успехом, тогда как все последующие не дали положительного результата.
|
|||
|
||||
| DevoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Как оказалось нужно было немного докрутить.
В проекте с dll с com в Run -> Parameters -> Host Application выбираю клиента, жму F9. Запускается клиент. Жму на кнопку, которая запускает сервер. После этого иду в Run -> Attach to Process где в списке процессов появлется dllhost.exe - системный процесс, в адресное пространство которого загружается dll, содержащая com-объект. Выделяю в списке dllhost.exe, жму кнопку Attach. Только после этого в реализации функций интерфейса отобразятся точки останова и соответственно управление может быть передано на одну из них. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |