![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск Dll в отдельном потоке [D7, WinXP]
Dmitriy G. © (2005-08-11 17:16:00)Необходимо загрузить функцию из Dll и через некоторое время, если функция например зависла выгрузить dll из памяти и освободить все ресурсы, выделенные dll-кой в процессе работы.
Для этого создаю отдельный поток в котором собственно и загружаю dll-ку. Но проблема с прибиванием... Dll может запустить произвольный exe файл, в котором могут быть свои потоки... Поэтому приходится самому строить дерево процессов, закрывать все дочерние процессы и Handles, которые появились после загрузки библиотеки в порожденных процессах/потоках. В принципе работает но попадаются "неприятные" exe-ки у которых не получается закрыть все открытые Handle...
И вообще такая система не выглядит достаточно стройной... Может есть метод проще?
Заранее благодарен...
Leonid Troyanovsky (2005-08-11 19:10:00) [1]
> Dmitriy G. © (11.08.05 17:16)
Туманно как-то.
Что это за функция, которая нуждается в запуске процессов?
И, почему, собс-но, в dll?
Да и какое ей дело до судьбы процессов?
Предположим, что нам очень надо вызвать функцию из некоторой
несамописной dll, в поведении которой мы не очень уверены.
Для этого, наиболее приемлем вариант с вызовом оной библиотечной
функции из отдельного процесса.
Т.е., надо сделать отдельное приложение, которое специализируется
на работе с этой библиотекой: принимает параметры, делает вызовы
и возвращает результат, например, через WM_COPYDATA.
В случае возникновения сложностей процесс прибивается,
вплоть до TerminateProcess.
Во всяком случае, никаких проблем с собс-ным приложением нет.
--
Regards, LVT.
alpet (2005-08-11 18:56:00) [2]Что-то странно даже, если dll запускает произвольныйexe файл, какбы это к проблемам не привело потом.
troits (2005-08-11 18:42:00) [3]А что значит - "не получается закрыть все открытые Handle."? Если процесс "пришибается", например TerminateProcess, то вместе с ним освобождаются все ресурсы, на которые не ссылаются другие процессы. То есть, следить надо только за процессами?