![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Не обижайтесь, но сейчас вы написали полный бред. Вам серьёзно нужно занятся изучением основных правил работы системы (весь код, связанный с C/C++ можете игнорировать). В частности: завершение процесса или поизучайте описание ExitProcess. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Avers |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.6.2008 Где: 26rus Репутация: нет Всего: нет |
Благодарю за ссылки (но времени на чтение нет :(( - зачетная неделя, сессия + работа). К критике отношусь вполне адекватно (т.е. обижаться не стану).
Вопрос: можете в двух словах пояснить суть загрузки и выгрузки динамических библиотек (насколько знаю bpl - почти та же dll). Где-то наталкивался на информацию, что dll, вручную загруженную, требуется и выручную выгружать (т.е. сама она ни куда не денется). Мне видится логичным, что евсли файл загружен в память, ему присвоен Handle, значит, этот Handle я могу получить и из другого приложения. Зачем же тогда вообще проверка на наличие: загружен ли пакет в память, если у меня было бы только одно приложение, использующее данный пакет. --------------------
Born to be wild |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
при убийстве основного потока.процесса , все что им было загружено все тоже улетает , если не юзают данную библиотеку в другом процессе -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Короче, после ваших слов о "пакете, остающемся в памяти после завершения приложения" я понял, что вы, скорее всего, и в пакетах ничего не понимаете. Посему вот: демка в аттаче. Целых три (!) различных варианта реализации пакетов с интерфейсом, формой и ручной выгрузкой. Реализации используют различные схемы управления жизненным циклом - хорошо бы разобраться в этих примерах, прежде чем использовать их.
Примеры набросал на скорую руку - подправьте там где что надо (пути загрузки пакета и т.п.). Приложение, разумеется, нужно компилировать с run-time пакетами. Присоединённый файл ( Кол-во скачиваний: 52 )
PackageDemo.rar 12,79 Kb-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Очень грубо и кратко: в Win32 каждый процесс не зависим от другого. У каждого процесса есть своё адресное пространство. Поэтому любые адреса, дескрипторы и т.п. имеют смысл только в рамках текущего процесса. При завершении процесса все его ресурсы автоматически освобождаются.
Далее, при загрузке DLL, пакета (это действительно просто DLL) в адресное пространство пакет загружается в память. При этом загрузка может быть явной (LoadLibrary/LoadPackage) и неявной (procedure ... external 'mydll.bpl'). Вы можете загружать пакет/DLL и несколько раз. В этом случае просто увеличивается счётчик числа загрузок. При выгрузке - он уменьшается. Физически DLL будет выгружаться только когда счётчик равен 0. Разумеется, поскольку процессы изолированы друг от друга, то в одном процессе библиотека может быть загружена 5 раз, а в другом - и вовсе ни одного раза. Поэтому теоретически в них тоже возможны ошибки ;) Использовать только после проверки. Это просто демонстрация идеи, "proof of concept". Это сообщение отредактировал(а) CodeMonkey - 18.12.2008, 12:20 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Avers |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.6.2008 Где: 26rus Репутация: нет Всего: нет |
Спс))
Вот еще вопрос. Приложение запущено, пакет загружен, выведена форма из пакета. Запускаю вторую копию этого же приложения, которая пытается найти уже загруженный пакет с помощью GetModuleHandle, но все равно не находит и грузит его заново..... Вапще не понимаю, почему. Смысл тогда проверять наличи пакета в памяти?..... --------------------
Born to be wild |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
А я не знаю, зачем вы это делаете -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
вроде он дает ответ , был ли загружен что то в своем же процессе! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| Правила форума "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. |