00097. Написания DLL библиотек и использование их с скриптах
Last updated
Last updated
Написания DLL библиотек и использование их с скриптах|Всем привет! После 2-х месяцев застоя я продолжаю вести уроки по скриптингу. Сегодняшний урок будет посвящен DLL-библиотекам. Мы будем учится подключать, написанные нами, файлы.|wmysterio|wmysterio||||Библиотека - это набор функций, написанных на любом языке программирования. В этом уроке мы напишем простейшую библиотеку на С++ и используем её в Cleo-скрипте. Этот урок будет приквел в написании ASI-скриптов.
Начнем с написания. Для примера, я взял Visual Studio 2008, с помощью которой мы создадим библиотеку. Для этого, откроем новый проект и укажем тип проекта:
Указываем шаблон "Консольное приложение Win32", тип проекта - "Win32". Вводим имя проекта и нажимает "ОК". После чего в нас появиться диалоговое окно такого типа:
Выбираем "DLL", и ставим галочку на пустой проект, после чего нажимаем кнопку "Готово". Программа создала нам 3 папки: "Заголовочные файлы", "Файлы исходного кода" и "Файлы ресурсов". Выбираем папку "Файлы исходного кода", нажимаем правую кнопку мыши и выбираем опцию "Добавить->Создать элемент":
В появившемся окне выбираем "Код->Файл CPP". В поле "Имя" мы даём название нашему исходному файлу:
Когда данные заполнены, нажимаем "Добавить". Перед нами пустой проект. Здесь мы будем писать код библиотеки. Все функции должны быть экспортными, поэтому перед каждой из них мы должны написать код:
Используя язык C++, мы напишем простенькую функцию, которая будет возвращать нам сумму 3-х целых чисел. Мой код такой:
Всё, что остаётся - дописать код эксторта и подключить стандартную библитеку "iostream":
Нам осталось скопировать нашу DLL в папку с игрой. Я, например, кину её в папку "Cleo":
Теперь берём в руки наш любимый Sanny Builder и будем писать код :) Для начала, рассмотрим опкоды, которые работают DLL-библиотекой. Следующий опкод загружает библиотеку в память
Здесь: 0@ - имя загруженной библиотеки "CLEO\wmysterio.dll" - путь с самой DLL-ке.
Опкод выгружает ранее загруженную библиотеку из памяти.
Здесь: 0@ - имя загруженной библиотеки× **ВАЖНО:** Библиотеку нужно всегда выгружать из памяти после использования
Получить адрес функции библиотеки можно с помощью опкода:
Здесь: 0@ - хэндл загруженной библиотеки "plus" - имя фунции в библиотеке 1@ - в переменную заносится адрес функции
Опкод выполняет функцию по адресу.
Здесь: 1@ - адрес функции num_params 3 - количество параметров, передаваемых в функцию. Так, как наша библиотека принимает 3 параметра, то число будет тоже 3. Следует учесть, что это "плавающий" параметр и количество зависит от самих функций. Обратите внимание, передача параметров осуществляется в обратном порядке! pop 3 - количество параметров, которых нужно очистить после использования функции. Этот параметр обычно совпадает с к-вом передаваемых параметров. _c=10 _b= 5 _a= 3 - перечисление параметров, которые будут переданы в функцию. К-во должно строго совпадать с к-вом параметров в нашей dll-ке. В нашем случаи мы передадим числа 10, 5 и 3. 2@ - переменная, в которую будет возвращено значение. В нашем случае эта переменная необходимая, но если функция ничего не возвращает, то поле остаётся пустым.
Следует обратить внимание, что этот опкод выполняет функции не только DLL-библиотек, но и GTA-шные функции. О них я расскажу в следующих уроках.
Проверяем наш скрипт:
Нам вывело число 18, то есть, наша функция работает без проблем!
Это самый простой пример, дальше я постепенно буду умерено усложнять библиотеки. Обычно их используют как для написания новых опкодов, так и целых ASI-скриптов, но их принцип написания существенно отличается. На этом урок окончен! Надеюсь эти навыки пригодятся Вам ;)|3226|1|0|76954486png
794531
400267``\|68724190
png756
428400
226\|40297185`png`483`234`400`193
|58734607png
793504
400254``\|18035124
png447
328400
293\|12473224`png`600`337`400`224
|19665781png
23`22
Теперь скомпилируем код, нажав на конку или клавишу F5. Если у нас всплывает окно с сообщением о том, что нужно указать исполняющий файл, то нажимаем "Отмена". От нас требуют запустить какую-то программу, что бы проверить работоспособность. В нашем случае нет нужды что-то указывать, по этому нажимает отрицательный вариант. Что бы не выскакивало это окно, то пользуемся клавишей <kbd>F7
.