Можно ли выполнять код при импорте модуля?

В случае библиотеки импорта для DLL, файл .lib делает not вообще никакой фактический код. Он в основном содержит только список функций в связанной DLL - достаточно, чтобы компоновщик вставлял ссылку на эту DLL в нечто, связанное с библиотекой, но не намного больше.

Файл .exp файл экспорта - в основном примерно такой же, как файл .lib. Он используется (по крайней мере, в первую очередь), когда у вас есть циклическая зависимость. Например, предположим, что у вас есть DLL, которая выступает в качестве подключаемого модуля для исполняемого файла. Исполняемый файл предоставляет некоторые экспортированные функции для использования с помощью подключаемых DLL-модулей, но также должен иметь возможность вызывать некоторые функции в плагинах (например, для загрузки и инициализации подключаемого модуля).

DLL не будет связываться до тех пор, пока исполняемый файл не будет создан для предоставления файла .lib, но исполняемый файл не будет связан, пока DLL не будет создана для предоставления файла .lib. Чтобы разбить зависимость, вы запускаете компоновщик против исполняемого файла, который не работает (поскольку он не может найти .lib-файл для DLL), но будет генерировать файл .exp. Затем вы связываете DLL с .exp-файлом для исполняемого файла. Затем вы можете повторно запустить ссылку для создания исполняемого файла, используя DLL-файл для DLL.

11
задан CharlesB 25 February 2013 в 15:28
поделиться