При загрузке DLL-файла также вызывается точка входа в DLL-файл? - PullRequest
0 голосов
/ 07 февраля 2019

Я беру пример с вопроса.

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

Один из этих DLL-файлов, называемый «B», имеет точку входа, подобную функции DllMain.

Так что, если я запускаю «A», будет ли также вызываться точка входа «B»?

Если это называется, Могу ли я контролировать параметры DllMain?

Спасибо за ваш интерес к этому вопросу.

Хорошего дня:)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Зависит от того, как вы загружаете DLL.

  • Если она связана через таблицу импорта, она будет загружена и ее DllMain будет выполнено, когда потребуется ее зависимость (дофактически загружает зависимость).

  • Если она загружается через LoadLibrary, будет выполнена ее DllMain.

  • Если этозагружается через LoadLibraryEx и используется любой из флагов LOAD_LIBRARY_AS_DATAFILE, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE или LOAD_LIBRARY_AS_IMAGE_RESOURCE, DllMain будет пропущено.

Более подробную информацию можно найти в документация LoadLibraryEx .

0 голосов
/ 15 февраля 2019

Я отвечаю на свой вопрос:)

примеры

Функция DllMain:

DllMain(...) {
    MessageBoxA(NULL, "in DLL1 function DllMain()", "test", 0);
    hello()
    ...
}

функция приветствия (не экспортируемая функция):

hello() {
    MessageBoxA(NULL, "in DLL1 function hello()", "test", 0);
}

экспортируемая функция (экспортируемая функция):

exported() {
    MessageBoxA(NULL, "in DLL1 function exported()", "test", 0);
}

, и окно сообщения появляется в следующем порядке:

DllMain () -> hello () -> exported () -> DllMain () -> hello ()

, но я не знаю, почему функция DllMain вызывается окончательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...