• Уважаемый посетитель!!!
    Если Вы уже являетесь зарегистрированным участником проекта "миХей.ру - дискусcионный клуб",
    пожалуйста, восстановите свой пароль самостоятельно, либо свяжитесь с администратором через Телеграм.

Файлы *.DLL

  • Автор темы Автор темы Maia
  • Дата начала Дата начала
M

Maia

Гость
С помощью какой программы можно открыть файлы типа *.DLL :(
 
А зачем ты хочешь их открывать? Эти файлы используются системой и различными программами... Если ты не знаешь этого, то лучше тебе их вообще не трогать... А если так уж хочется посмотреть, то открой, например, в Блокноте...
 
Это служебные файлы (динамические библиотеки). Открывать их - нет никакой необходимости.
сли так уж хочется посмотреть, то открой, например, в Блокноте...
Можно открыть принудительно, но ничего кроме беспорядочного набора символов увидеть не удастся.
 
ничего кроме беспорядочного набора символов увидеть не удастся.

Ну не только беспорядочный набор... Некоторая информация вполне читабельная, но дело в том, что человеку ИНТЕРЕСНО. Так почему бы не посмотреть? Главное, ничего там не изменять. :)
 
Ресурсы там могут быть, их можно открыть Restorator'ом или resource Hacker'ом. Также может быть кому-то интересно посмотреть список функций библиотеки - тогда можно заглянуть чем-то типа Dependency Walker'ом (входит в VS).
 
Металлург написал(а):
Это служебные файлы (динамические библиотеки). Открывать их - нет никакой необходимости.
Я это вообще-то знаю. ;)
А нужно мне открыть один файл для работы.
 
Maia, присмотрись к совету Шогал. Предложенные им программы прекрасно открывают динамические библиотеки.
 
Лучше поздно, чем никогда. Небольшой ликбез по DLL.

Динамически подключаемые библиотеки (dynamic-link libraries, DLL) — краеугольный камень операционной системы Windows, начиная с самой первой ее версии. В DLL содержатся все функции Windows API. Три самые важные DLL: Kernel32.dll (управление памятью, процессами и потоками), User32.dll (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.dll (графика и вывод текста).
В Windows есть и другие DLL, функции которых предназначены для более специализированных задач. Например, в AdvAPI32.dll содержатся функции для зашиты объектов, работы с реестром и регистрации событий, в ComDlg32.dll — стандартные диалоговые окна (вроде File Open и File Save), a ComCtl32.dll поддерживает стандартные элементы управления.
Естественно, DLL-библиотеки могут быть написаны для любой Windows-программы и содержать код (функции) и данные (ресурсы, константы).

Причины применения DLL:
• Расширение функциональности приложения. DLL можно загружать в адресное пространство процесса динамически, что позволяет приложению, определив, какие действия от него требуются, подгружать нужный код. Поэтому одна компания, создав какое-то приложение, может предусмотреть расширение его функциональности за счет DLL от других компаний.
• Возможность использования разных языков программирования.
У Вас есть выбор, на каком языке писать ту или иную часть приложения. Так, пользовательский интерфейс приложения Вы скорее всего будете создавать на Microsoft Visual Basic, но прикладную логику лучше всего реализовать на C++. Программа на Visual Basic может загружать DLL, написанные на C++, Коболе, Фортране и др.
• Более простое управление проектом. Если в процессе разработки программного продукта отдельные его модули создаются разными группами, то при использовании DLL таким проектом управлять гораздо проше. Однако конечная версия приложения должна включать как можно меньше файлов. (Знап я одну компанию, которая поставляла свой продукт с сотней DLL. Их приложение запускалось ужасающе долго — перед началом работы ему приходилось открывать сотню файлов на диске.)
• Экономия памяти. Если одну и ту же DLL использует несколькоприложе-ний, в оперативной памяти может храниться только один ее экземпляр, доступный этим приложениям. Пример — DLL-версия библиотеки C/C++. Ею пользуются многие приложения. Если всех их скомпоновать со статически подключаемой версией этой библиотеки, то код таких функций, как sprintf, strcpy, malloc и др.. будет многократно дублироваться в памяти. Но если они компонуются с DLL-версией библиотеки C/C++, в памяти будет присутствовать лишь
одна копия кода этих функций, что позволит гораздо эффективнее использовать оперативную память.
• Разделение ресурсов. DLL могут содержать такие ресурсы, как шаблоны диалоговых окон, строки, значки и битовые карты (растровые изображения). Эти ресурсы доступны любым программам.
■ Упрощение локализации. DLL нередко применяются для локализации приложений. Например, приложение, содержащее только код без всяких компонентов пользовательского интерфейса, может загружать DLL с компонентами локализованного интерфейса.
• Решение проблем, связанных с особенностями различных платформ.
В разных версиях Windows содержатся разные наборы функций. Зачастую разработчикам нужны новые функции, существующие в той версии системы, которой они пользуются, Если Ваша версия Windows не поддерживает эти функции, Вам не удастся запустить такое приложение: загрузчик попросту откажется его запускать. Но если эти функции будут находиться в отдельной DLL, Вы загрузите программу даже в более ранних версиях Windows, хотя воспользоваться ими Вы все равно не сможете.
• Реализация специфических возможностей. Определенная функциональность в Windows доступна только при использовании DLL. Например, отдельные виды ловушек (устанавливаемых вызовом SvtWindowsHookEx SetWinEventHook) можно задействовать при том условии, что функция уведомления ловушки размещена в DLL. Кроме того, расширение функциональности оболочки Windows возможно лишь за счет создания СОМ-объектов, существование которых допустимо только в DLL. Это же относится и к загружаемым Web-браузером ActiveX-элементам, позволяющим создавать Web-страницы с более богатой функциональностью.
Зачастую создать DLL проше. чем приложение, потому что она является лишь набором автономных функций, пригодных для использования любой программой, причем в DLL обычно нет кода, предназначенного для обработки циклов выборки сообщений или создания окон. DLL представляет собой набор модулей исходного кода, в каждом из которых содержится определенное число функций, вызываемых приложением (исполняемым файлом) или другими DLL.
Чтобы поток мог вызвать функцию из DLL-модуля, последний надо спроецировать на адресное пространство процесса, которому принадлежит этот поток. Делается это двумя способами. Первый состоит в том, что код Вашего приложения просто ссылается на идентификаторы, содержащиеся в DLL, и тем самым заставляет загрузчик неявно загружать (и связывать) нужную DLL при запуске приложения.
Второй способ— явная загрузка и связывание требуемой DLL в период выполнения приложения. Иначе говоря, его поток явно загружает DLL (функцией LoadLibrary) в адресное пространство процесса, получает виртуальный адрес необходимой DLL-функции и вызывает ее по этому адресу. Изящество такого подхода в том, что все происходит в уже выполняемом приложении.
Как только DLL спроецирована на адресное пространство вызывающего процесса, ее функции доступны всем потокам этого процесса. Фактически библиотеки при этом теряют почти всю индивидуальность: лля потоков код и данные DLL — просто дополнительные код и данные, оказавшиеся в адресном пространстве процесса. Когда поток вызывает из DLL какую-то функцию, та считывает свои параметры из стека потока и размешает в этом стеке собственные локальные переменные. Кроме того, любые созданные кодом DLL объекты принадлежат вызывающему потоку или процессу — DLL ничем не владеет.

Примечание: что такое процесс и поток:
Процесс обычно определяют как экземпляр выполняемой программы, и он состоит из двух компонентов:
объекта ядра, через который операцинная система управляет процессом. Там же хранится статистическая информация о процессе;
• адресного пространства. в котором содержится код и данные всех ЕХЕ- и DLL-модулей. Именно в нем находятся области памяти, динамически распределяемой для стеков потоков и других нужд.
Процессы инертны. Процесс ничего не исполняет, он просто служит контейнером потоков. Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах. На практике это означает, что потоки исполняют код и манипулируют данными в адресном пространстве процесса. Поэтому, если два и более потоков выполняется в контексте одного процесса, все они делят одно адресное пространство. Потоки могут исполнять один и тот же код и манипулировать одними и теми желанными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах.

А если говорить очень простым языком, процесс - это EXE-файл, который вы запустите, поток - это задачи, которые будут выполняться. (может быть несколько задач, выполняющихся параллельно в одном процессе)
(взято из книги Джефрри Рихтера Windows для профессионалов)
 
Назад
Сверху