Что такое точно файлы DLL, и как они работают?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
202
задан Alan006 5 December 2013 в 06:16
поделиться

7 ответов

, Что такое DLL?

Динамически подключаемые библиотеки (DLL) s похожи на EXEs, но они не непосредственно исполняемы. Они подобны .so файлам в Linux/Unix. То есть DLLs являются реализацией MS общих библиотек.

DLLs так похожи на EXE, что сам формат файла является тем же. И EXE и DLLs основаны на формате файла Портативного исполняемого файла (PE). DLLs может также содержать библиотеки.NET и COM-компоненты.

, Что содержит DLL?

DLL А содержит функции, классы, переменные, UIs и ресурсы (такие как значки, изображения, файлы...), который использует EXE или другой DLL.

Типы библиотек:

В фактически всех операционных системах, существует 2 типа библиотек. Статические библиотеки и динамические библиотеки. В окнах расширения файла следующие: Статические библиотеки (.lib) и динамические библиотеки (.dll). Основное различие - то, что статические библиотеки связаны с исполняемым файлом во время компиляции; тогда как динамически подключаемые библиотеки не связаны до времени выполнения.

[еще 1119] на статических и динамических библиотеках:

Вы обычно не видите статические библиотеки, хотя на Вашем компьютере, потому что статическая библиотека встраивается непосредственно в модуле (EXE или DLL). Динамическая библиотека является автономным файлом.

DLL А может быть изменен в любое время и только загружается во времени выполнения, когда EXE явно загружает DLL. Статическая библиотека не может быть изменена, как только она компилируется в EXE. DLL может быть обновлен индивидуально, не обновляя сам EXE.

Загрузка DLL:

загрузки программы А DLL при запуске, через Win32 API LoadLibrary, или когда это - зависимость другого DLL. Программа использует GetProcAddress для загрузки функции или LoadResource для загрузки ресурса.

Дополнительные материалы для чтения:

проверьте MSDN или Википедия для дополнительных материалов для чтения. Также источники этого ответа.

261
ответ дан Brian R. Bondy 23 November 2019 в 05:00
поделиться

, Что такое DLL?

файлы DLL являются двоичными файлами, которые могут содержать исполняемый код и ресурсы как изображения, и т.д. В отличие от приложений, они не могут быть непосредственно выполнены, но приложение загрузит их как и когда они будут требоваться (или внезапно во время запуска).

действительно ли они важны?

Большинство приложений загрузит файлы DLL, которых они требуют при запуске. Если какой-либо из них не будет найден, то система не будет в состоянии запустить процесс вообще.

файлы DLL могли бы потребовать других файлов DLL

Таким же образом, что приложение требует файла DLL, файл DLL мог бы зависеть от других файлов DLL сам. Если один из этих файлов DLL в цепочке зависимости не будет найден, приложение не загрузится. Это отлажено легко с помощью любой зависимости инструменты Уокера, как зависимость Walker .

существуют столь многие из них в системных папках

, большая часть функциональности системы представлена пользовательской программе в форме файлов DLL, поскольку они - стандартная форма совместного использования кода / ресурсы. Каждая функциональность сохранена отдельно в различных файлах DLL так, чтобы только необходимые файлы DLL были загружены и таким образом уменьшили ограничения памяти на систему.

Установленные приложения также используют файлы DLL

, файлы DLL также становятся формой разделения технических возможностей физически, как объяснено выше. Хорошие приложения также пытаются не загрузить файлы DLL, пока они абсолютно не требуются, который уменьшает требования к памяти. Это также заставляет приложения поставляться с большим количеством файлов DLL.

Ад DLL

Однако при обновлениях системы времен часто повреждает другие программы, когда существует несоответствие версии между совместно использованными файлами DLL и программой, которая требует их. Системные контрольные точки и кэш DLL, и т.д. были инициативы со стороны M$ для решения этой проблемы. Платформа.NET не могла бы столкнуться с этой проблемой вообще.

, Как мы знаем то, что в файле DLL?

необходимо использовать внешний инструмент как DUMPBIN или Зависимость Walker, который не только покажет, какие публично видимые функции (известный как экспорт) содержатся в файлах DLL и также чего других файлов DLL это требует и который экспортирует из тех файлы DLL, от которых этот файл DLL зависит.

, Как мы создаем / используют их?

Отсылают документацию по программированию от Вашего поставщика. Для C++ обратитесь к LoadLibrary в MSDN.

34
ответ дан Yogesh Umesh Vaity 23 November 2019 в 05:00
поделиться

Let’s говорят создание исполняемого файла, который использует некоторые функции, найденные в библиотеке.

, Если библиотека Вы используете, статичны , компоновщик скопирует объектный код для этих функций непосредственно из библиотеки и вставит их в исполняемый файл.

Теперь, если этот исполняемый файл выполняется, он имеет каждую вещь, в которой он нуждается, таким образом, исполняемый загрузчик просто загружает его в память и выполняет его.

, Если библиотека динамичная , компоновщик не введет объектный код, а скорее это вставит тупик, который в основном говорит, что эта функция расположена в этом DLL в этом местоположении.

Теперь, если этот исполняемый файл выполняется, биты исполняемого файла отсутствуют (т.е. тупики), таким образом, загрузчик проходит исполняемый файл, согласовывающий недостающие тупики. Только после того, как все тупики были разрешены, будет исполняемый файл быть позволенным работать.

, Чтобы видеть это в действии удалять или переименовывает DLL и смотрит, как загрузчик сообщит о недостающей ошибке DLL, когда Вы попытаетесь выполнить исполняемый файл.

Отсюда имя [1 111] Динамически подключаемая библиотека , части процесса соединения делаются динамично во время выполнения исполняемым загрузчиком.

Один заключительное примечание, если Вы не связываете с DLL тогда тупиков, будет вставлено компоновщиком, но Windows все еще обеспечивает GetProcAddress API, который позволяет Вам загружать выполнение точки входа функции DLL еще долго после того, как исполняемый файл запустился.

12
ответ дан jussij 23 November 2019 в 05:00
поделиться

DLLs (динамически подключаемые библиотеки) и SLs (совместно использованные библиотеки, эквивалентные под UNIX), являются просто библиотеками исполняемого кода, который может быть динамично связан в исполняемый файл во время загрузки.

библиотеки Static введены в исполняемый файл во время компиляции и фиксируются от той точки. Они увеличивают размер исполняемого файла и не могут быть совместно использованы.

библиотеки Dynamic имеют следующие преимущества:

1/Они загружаются во время выполнения, а не время компиляции, таким образом, они могут быть обновлены независимо от исполняемого файла (все те необычные окна и диалоговые окна, которые Вы видите в Windows, прибывшем от DLLs, таким образом, стиль Вашего приложения может измениться без Вас имеющий необходимость переписать его).

2/, поскольку они независимы, код, может быть совместно использован через несколько исполняемых файлов - это сохраняет память с тех пор при выполнении 100 приложений с единственным DLL может только быть одна копия DLL в памяти.

Их основной недостаток является преимуществом № 1 - имеющий изменение DLLs, независимое, Ваше приложение может заставить Ваше приложение прекращать работать или начинать вести себя причудливым способом. Управление версиями DLL имеет тенденцию не быть организованным очень хорошо в соответствии с Windows, и это приводит к странно названному "Ад DLL".

11
ответ дан paxdiablo 23 November 2019 в 05:00
поделиться

Файлы DLL содержат Таблица экспорта , которая является списком символов, которые могут искаться программой вызова. Символы обычно являются функциями с соглашение о вызовах C ( __ stcall). Таблица экспорта также содержит адрес функции.

С этой информацией, программа вызова может тогда вызвать функции в DLL даже при том, что это не имело доступа к DLL во время компиляции.

Динамически подключаемые библиотеки Представления имеет еще некоторую информацию.

10
ответ дан Peter Mortensen 23 November 2019 в 05:00
поделиться

http://support.microsoft.com/kb/815065

DLL А является библиотекой, которая содержит код и данные, которые могут использоваться больше чем одной программой одновременно. Например, в операционных системах Windows, Comdlg32 DLL выполняет стандартный диалог связанные с полем функции. Поэтому каждая программа может использовать функциональность, которая содержится в этом DLL для реализации диалогового окна Open. Это помогает продвинуть повторное использование кода и эффективное использование памяти.

При помощи DLL, программа может быть построена из модулей в отдельные компоненты. Например, бухгалтерская программа может быть продана модулем. Каждый модуль может быть загружен в основную программу во время выполнения, если тот модуль установлен. Поскольку модули являются отдельными, время загрузки программы быстрее, и модуль только загружается, когда ту функциональность требуют.

Кроме того, обновления легче относиться к каждому модулю, не влияя на другие части программы. Например, у Вас могут быть программа платежной ведомости и изменение налоговых ставок каждый год. Когда эти изменения изолируются к DLL, можно применить обновление, не будучи должен создать или установить целую программу снова.

http://en.wikipedia.org/wiki/Dynamic-link_library

6
ответ дан Jorge Ferreira 23 November 2019 в 05:00
поделиться

DLLs (Динамически подключаемые библиотеки) содержат ресурсы, используемые одним или несколькими приложениями или сервисами. Они могут содержать классы, значки, строки, объекты, интерфейсы, и в значительной степени что-либо, что разработчик должен был бы сохранить кроме UI.

1
ответ дан tsilb 23 November 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: