|
|
  |
DLL, Глупый вопрос. :) |
|
|
|
Jul 26 2016, 12:25
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(muravei @ Jul 26 2016, 16:44)  Можно ли в длл(свою) загрузить другую длл. Оно , конечно, не долго попробовать... Но , может , этого не стоит и делать.  А что значит "в длл загрузить длл"? Как я понимаю: при вызове функции DLL, она отображается в память вызвавшего процесса, и продолжается собственно выполнение этого же процесса. Если изнутри этой функции вызвать другую функцию DLL - ну и что? Таких вызовов полно. Произойдёт опять отображение той второй DLL на память этого же процесса. У каждого процесса своя копия образа всех отображённых в него DLL. Т.е. - у DLL нет своей памяти и "грузить", соответственно, туда невозможно. Память есть у процесса. Туда и отображаются DLL.
|
|
|
|
|
Jul 27 2016, 06:58
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(muravei @ Jul 26 2016, 19:52)  Естественно, но , например, при завершении процесса, кто ее выгрузит из памяти? Процесс , то не знает... Это дело системы - выгружать или нет. Эта DLL может использоваться и другими процессами. Система может, например, завести счётчик использования, инкрементировать его при каждом отображении в память процесса, декрементировать при завершении такого процесса. И когда счётчик станет ==0 - значит DLL больше не нужна, можно её выгрузить. Цитата(k155la3 @ Jul 26 2016, 19:54)  Возможно имеется ввиду не загрузка, а "зависимые" DLL когда одно DLL тянет за собой целый парвоз-состав. В любом случае: выполняется не DLL, а процесс и только у него есть контекст. А при вызове функции DLL данным процессом, она отображается в память процесса. Неважно - вызвана эта функция из кода процесса или из кода функции другой DLL, уже отображенной в памятть процесса - для системы она вызвана из процесса, так как вызвана из его памяти.
|
|
|
|
|
Aug 1 2016, 08:42
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Цитата(Kabdim @ Aug 1 2016, 11:33)  Статического связывания ДЛЛ вроде как не бывает.  Если конечно не считать за такую вспомогательную либу которая генерится студиевскими компиляторами и требуется только ими же. Не правильно выразился. Есть два типа связывания DLL - статическое и динамическое. Первый используется на этапе компиляции/линковки программы. Например, загружая программу, загрузчик программ операционки сам проверяет связи программы, обновляет указатели на ф-ции и подгружает недостающие DLL и запускает программу. Второй используется на этапе выполнения программы. Он используется, например, при добавлении различных плагинов к программе. Программа в определенном каталоге сканирует файлы DLL и пытается их загрузить, тем самым добавляя новые ф-ции в программу. Здесь, соответственно, программы сама должна позаботится о выгрузке неиспользуемых DLL (то есть программист должен написать соответствующий код) Это статическое связывание:
Сообщение отредактировал alexeyv - Aug 1 2016, 08:45
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|