Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректная выгрузка пакеа bpl 
:(
    Опции темы
CodeMonkey
Дата 18.12.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Avers @  18.12.2008,  10:56 Найти цитируемый пост)
Проверил, остается ли пакет в памяти, ибо навмеревался попытаться выгрузить его после завершения программы.

Не обижайтесь, но сейчас вы написали полный бред. Вам серьёзно нужно занятся изучением основных правил работы системы (весь код, связанный с C/C++ можете игнорировать). В частности: завершение процесса или поизучайте описание ExitProcess.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Avers
Дата 18.12.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Благодарю за ссылки (но времени на чтение нет :(( - зачетная неделя, сессия + работа). К критике отношусь вполне адекватно (т.е. обижаться не стану).
Вопрос: можете в двух словах пояснить суть загрузки и выгрузки динамических библиотек (насколько знаю bpl - почти та же dll). Где-то наталкивался на информацию, что dll, вручную загруженную, требуется и выручную выгружать (т.е. сама она ни куда не денется). 
Мне видится логичным, что евсли файл загружен в память, ему присвоен Handle, значит, этот Handle я могу получить и из другого приложения. Зачем же тогда вообще проверка на наличие: загружен ли пакет в память, если у меня было бы только одно приложение, использующее данный пакет. 
--------------------
Born to be wild
PM MAIL   Вверх
Romikgy
Дата 18.12.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



Цитата(Avers @  18.12.2008,  10:50 Найти цитируемый пост)
Где-то наталкивался на информацию, что dll, вручную загруженную, требуется и выручную выгружать (т.е. сама она ни куда не денется). 

при убийстве основного потока.процесса , все что им было загружено все тоже улетает , если не юзают данную библиотеку в другом процессе


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
CodeMonkey
Дата 18.12.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Короче, после ваших слов о "пакете, остающемся в памяти после завершения приложения" я понял, что вы, скорее всего, и в пакетах ничего не понимаете. Посему вот: демка в аттаче. Целых три (!) различных варианта реализации пакетов с интерфейсом, формой и ручной выгрузкой. Реализации используют различные схемы управления жизненным циклом - хорошо бы разобраться в этих примерах, прежде чем использовать их.

Примеры набросал на скорую руку - подправьте там где что надо (пути загрузки пакета и т.п.). Приложение, разумеется, нужно компилировать с run-time пакетами.

Присоединённый файл ( Кол-во скачиваний: 52 )
Присоединённый файл  PackageDemo.rar 12,79 Kb


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
CodeMonkey
Дата 18.12.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Очень грубо и кратко: в Win32 каждый процесс не зависим от другого. У каждого процесса есть своё адресное пространство. Поэтому любые адреса, дескрипторы и т.п. имеют смысл только в рамках текущего процесса. При завершении процесса все его ресурсы автоматически освобождаются.

Далее, при загрузке DLL, пакета (это действительно просто DLL) в адресное пространство пакет загружается в память. При этом загрузка может быть явной (LoadLibrary/LoadPackage) и неявной (procedure ... external 'mydll.bpl'). Вы можете загружать пакет/DLL и несколько раз. В этом случае просто увеличивается счётчик числа загрузок. При выгрузке - он уменьшается. Физически DLL будет выгружаться только когда счётчик равен 0.
Разумеется, поскольку процессы изолированы друг от друга, то в одном процессе библиотека может быть загружена 5 раз, а в другом - и вовсе ни одного раза.

Цитата(CodeMonkey @  18.12.2008,  12:11 Найти цитируемый пост)
Примеры набросал на скорую руку

Поэтому теоретически в них тоже возможны ошибки ;)  Использовать только после проверки. Это просто демонстрация идеи, "proof of concept".

Это сообщение отредактировал(а) CodeMonkey - 18.12.2008, 12:20


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Avers
Дата 18.12.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Спс))
Вот еще вопрос. 
Приложение запущено, пакет загружен, выведена форма из пакета. Запускаю вторую копию этого же приложения, которая пытается найти уже загруженный пакет с помощью GetModuleHandle, но все равно не находит и грузит его заново..... Вапще не понимаю, почему. Смысл тогда проверять наличи пакета в памяти?..... 
--------------------
Born to be wild
PM MAIL   Вверх
CodeMonkey
Дата 18.12.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Avers @  18.12.2008,  12:20 Найти цитируемый пост)
Смысл тогда проверять наличи пакета в памяти?..... 

А я не знаю, зачем вы это делаете smile Это вообще не ваш сценарий.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Romikgy
Дата 18.12.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



Цитата(Avers @  18.12.2008,  11:20 Найти цитируемый пост)
с помощью GetModuleHandle

вроде он дает ответ , был ли загружен что то в своем же процессе!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2742 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.