Журнал о программированнии на языках Blitz3D, BlitzPlus, BlitzMax

Как создавать и править модули

Материал из Blitz Et Cetera

Перейти к: навигация, поиск

Для начала нужно определиться, какой именно модуль ты собрался делать. Это либо это уже существующий модуль, написанный на C/C++/ObjC, либо интерфейс для DLL либо код BlitzMax.

Содержание

Mingw

Для Windows:

Чтобы компилировать модули нужен MinGW и прописанный путь в "Переменной среде". Для тех, кто не знает, переменные среды позволяют программам вызывать общие программы(как cmd.exe) только ссылаясь на её имя.

MinGW позволяет компилировать не-BlitzMax-овский код в модули для BlitzMax, а также использовать DLL-ки после написания враппера/декларирования. Нужно скачать два файла этот и этот(Автор ссылался на это, но там какая-то байда). Создай пакпку с любым именем(например: C:\dev\MinGW) и разархивируй туда оба архива.

Теперь нужно прописать переменную среду. Панель Управления>Система(или правой кнопкой мыши на Мой Компьютер>Свойства) жми закладку Дополнительно на ней внизу Переменные среды. Ищи переменную Path. Выбери её и жми Изменить. Проедь до конца строки, вставь точку с запятой(;) и пропиши папку bin(полный путь, например C:\dev\MinGW\bin ) из папки, куда ты разархивировал архивы.

Для Mac и Linux:

Не знаю, но вроде там в дистрибутиве есть gcc (GNU Compiler Collection) - это то что надо BlitzMax-у для компиляции модулей, написанных на разных языках программирования.

Забабахаем СВОЙ модуль!

Ок, начнем. Создай новый файл. Первой строкой идет:

Strict

Теперь определяем имя модуля коммандой Module :

Strict


Module Bot.FirstModule

Вторая строка определяет, что текущий файл - модуль, и его нельзя компилировать обычным способом. Затем опишем что это за модуль коммандой ModuleInfo :

Strict


Module Bot.FirstModule

ModuleInfo "Name: Мой первый модуль"
ModuleInfo "Description: Круто, не правдя ли?"
ModuleInfo "License: Public Domain"
ModuleInfo "Authors: Bot Builder и Ты"

ModuleInfo "CustomAttr: Увырлаг!"

Теперь подключаем необходимые для работы нашего модули:

Strict


Module Bot.FirstModule

ModuleInfo "Name: Мой первый модуль"
ModuleInfo "Description: Круто, не правдя ли?"
ModuleInfo "License: Public Domain"
ModuleInfo "Authors: Bot Builder и Ты"
ModuleInfo "CustomAttr: Увырлаг!"

Import BRL.StandardIO 'Для работы Print

Замечание: По настоящему ничего не подключается. Последняя строка гарантирует, что нужный модуль будет подключен к твоей программе. Другими словами - если ты подключишь свой модуль, то подключится и BRL.StandardIO.

Для примера буду использовать наипростейшую функцию, а вообще, в модулях можно использовать всё, как и в обычных программах.

Strict


Module Bot.FirstModule

ModuleInfo "Name: Мой первый модуль"
ModuleInfo "Description: Круто, не правдя ли?"
ModuleInfo "License: Public Domain"
ModuleInfo "Authors: Bot Builder и Ты"
ModuleInfo "CustomAttr: Увырлаг!"

Import BRL.StandardIO 'Для работы Print

Function SayHello(Name$)
 Print "Hi "+Name$

EndFunction

Демонстрация Private. Всё после Private не доступно снаружи модуля(т.е. из проги, подключающей его, или другого модуля):

Strict


Module Bot.FirstModule

ModuleInfo "Name: Мой первый модуль"
ModuleInfo "Description: Круто, не правдя ли?"
ModuleInfo "License: Public Domain"
ModuleInfo "Authors: Bot Builder и Ты"
ModuleInfo "CustomAttr: Увырлаг!"

Import BRL.StandardIO 'Для работы Print

Function SayHello(Name$)
 Print "Hi "+Name$
EndFunction

Private

Const Greeting$="Hi"

Всё, пора сохранять файл. Открой папку, где у тебя установлен BlitzMax, открой папку mod. В mod создай папку bot.mod. В ней создай папку firstmodule.mod. Важно, чтобы имена папок и файлов были точно такими, как описано тут. Сохраняй свой модуль в эту папку под именем firstmodule.bmx. Пуск>Выполнить или(Ctrl-Alt-Delete>Файл>Новая задача(выполнить...)) в строке ввода набери cmd. Вылезет родное (для некоторых) окно эмуляции доса, там пиши: CD C:\Program Files\ProgrammerProgs\BlitzMax\bin, или какой там у тебя путь и жми интэр. Далее пиши: bmk makemods -d bot.firstmodule для компиляции дебаг версии модуля, -r bot.firstmodule для компиляции релизной версии модуля или -a bot.firstmodule для полной компиляции модуляи опять жми интэр. Чтобы проверить что за байда получилась, создай новый файл и пиши в нем:

SayHello("Всем, Млин")

и запусти. Надеюсь напишется следующее:

Hi Всем, Млин!!!

Использование не bmx-ных файлов

Делается так:

Import "Файл.C"


Extern 'Добавь "win32"  если функции из win32 dll
 Function МояФункцияКоторуюЯХочуИспользовать:ТипВозвращаемогоЗначения(параметры:ихТипы)
 'И т.д.

End Extern

От переводчика (я так декларирую АПИ-шные функции в обычных файлах):

Extern "Win32"

 Function FindWindow:Int(ClassName$z,apptitle$z) = "FindWindowA@8"
 Function SetWindowLong:Int(hWnd%,nIndex%,dNewLong%) = "SetWindowLongA@12"
 Function GetWindowLong:Int(hWnd%,nIndex%) = "GetWindowLongA@8"

End Extern

Тут $z - это специальная C-шная строка, А @x - размер буфера для параметров, если не знаешь какой он, то просто его не пиши (в Дебуге увидишь, какой надо).

З.Ы. У переводчика работает, но подлежит проверке:)


Автор: Bot Builder
Перевод: MANIAK dobrii (e-mail: MANIAK_dobrii_sobaka_list.ru, сайт: http://www.maniak-dobrii.nm.ru/)

Другие

Друзья