Различие между временем загрузки и динамическим подключением во время выполнения

Мне нужно было сделать нечто подобное. Мне нужно было вывести свои данные в область памяти. Я смог сделать это, сделав:

kj::VectorOutputStream stream;
::capnp::writePackedMessage(stream, message);
/* then use stream.getArray() to get access to the data */
8
задан Jacob 26 September 2012 в 01:40
поделиться

2 ответа

Динамическое подключение времени загрузки

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

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

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

Это - динамическое подключение времени загрузки.

Динамическое подключение во время выполнения

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

Но задачу получения доступа к функции от в DLL оставляют исполняемому файлу и можно сделать с помощью Windows API GetProcAddress.

Это - динамическое подключение времени выполнения.

15
ответ дан 5 December 2019 в 10:05
поделиться

Вы забыли тег "домашней работы".

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

2
ответ дан 5 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

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