Уроки Iczelion'а

       

Создание исходника DLL, который будет содержать все эти функции


После того, как вы получите имена функций и размер их параметров, самое

трудное будет позади. Вам останется создать каркас DLL и написать функции

с такими же именами, как и в DLL. Hапример, в DLL только одна функция,

GetSomeLine, которая получает параметров на 16 байт. В исходнике вы

набиваете следующие линии:

.386

.model flat,stdcall

.code

GetSomeLine proc param1:DWORD, param2:DWORD, param3:DWORD, param4:DWORD

GetSomeline endp

end

Вы можете спросить, что это такое? Процедура, в которой нет ни одной

инструкции? Библиотека импорта не содержит никакой информации о том, что



должна делать функция. Единственной ее целью является предоставление

информации об именах функций и их параметров. Поэтому нам не нужно

помещать никаких инструкций в процедуру-болванку. Все равно мы сотрем

бесполезную DLL после сборки. Все, что мы хотим - это помесить в исходный

код информацию об именах функций и размере параметров, чтобы MASM

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

отдельности не важен. Для вашего сведения, в настоящее время MASM всегда

рассматривает каждый параметр как DWORD, какой бы модификатор размера вы

не поставили. Hапример, мы можем сделать так:

.386

.model flat,stdcall

.code

GetSomeLine proc param1:BYTE, param2:BYTE, param3:BYTE, param4:BYTE

GetSomeline endp

end

И MASM создаст в библиотеке импорта '_GetSomeLine@16'.

Создание файла определения модуля

Это простой процесс. Вам потребуется этот файл, что MASM мог

сгенерировать DLL и библиотеку импорта. Шаблон файла определения модуля

следующий:

LIBRARY <The name of the DLL>

EXPORTS

<The names of the functions>

Вам остается указать имя DLL, которое будет так же и именем библиотеки

импорта, а затем вставить имена функций после команды EXPORTS, по одному

имени функции на каждой линии. Сохраните файла и вы получите рабочий файл

определения модуля.



Содержание раздела