Создание исходника 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, по одному
имени функции на каждой линии. Сохраните файла и вы получите рабочий файл
определения модуля.