
|
Использование DLL (Динамически загружаемых библиотек) |
В тех случаях когда функциональные возможности GML - не достаточны для твоих
грандиозных планов, ты можешь реально расширить данные возможности, используя
плагины. Плагины должны быть в форме DLL файла (Динамически загружаемых
библиотек). В таком DLL файле ты можешь определить функции. Такие функции
могут быть написаны на любом языке программирования, которые поддерживают
создание DLL (например. Delphi, Visual C++, Visual Basic, и т.д.) Для этого
тебе необходимо как минимум знать один из таких языков и иметь навык
программирования. Плагины с функциями должны иметь специфический формат. Они
могут содержать ноль (zero), один или два параметра, каждый из которых может
быть вещественным числом (с плавающей точкой) или строкой с нулевым символом
в конце. Они должны возвращать либо вещественную строку, либо строку с нулевым
символом в конце.
В Delphi ты создаешь DLL сначала выбрав, New из меню File и затем выбрав
DLL. Далее приводится пример DLL, который ты можете использовать с Game Maker,
написанный в Delphi. (Обрати внимание, что это - Delphi код, а не GML код)!
library MyDLL;
uses SysUtils, Classes;
function MyMin(x,y:real):real; cdecl;
begin
if x<y then Result := x else Result := y;
end;
var res : array[0..1024] of char;
function DoubleString(str:PChar):PChar; cdecl;
begin
StrCopy(res,str);
StrCat(res,str);
Result := res;
end;
exports MyMin, DoubleString;
begin
end.
Эта DLL определяет две функции: MyMin, который берет два реальных параметра
и возвращают минимальный из этих двух, и DoubleString, который удваивает строку.
Обрати внимание, что нужно быть внимательным использованием памяти.
Именно поэтому я объявил результирующей глобальную строковую. Также обрати
внимание на использование cdecl соглашений о вызовах. Это важно. Как только ты
создал DLL в Delphi, у тебя получается файл MyDLL.DLL. Этот файл должен быть
помещен в каталог с твоей игры. (Или иное место, где окна могут найти его.)
Чтобы использовать данный DLL в Game Maker, сначала ты должен определить
внешние функции, которые хочешь использовать и какой тип параметров они берут.
Для этого в GML имеются следующие функции:
external_define0(dll,name,restype) - Определяет внешнюю функцию без параметров. dll - название dll файла. name - название функций. И restype - тип результата. Для этого используй либо ty_real, либо ty_string.
external_define1(dll,name,arg1type,restype) - Определяет внешнюю функцию с одним параметром. Так же точно как и в функции приведенной выше, только теперь arg1type - тип первого параметра. Для него опять используй либо ty_real либо ty_string.
external_define2(dll,name,arg1type,arg2type,restype) - Определяет внешнюю функцию с двумя параметрами.
Каждая из этих функций возвращает идентификатор внешней функции, которая
должна использоваться для его вызова. Так в вышеприведенном примере, в начале
игры ты использовал бы следующий GML код:
{
global.mmm =
external_define2('MYOWN.DLL','MyMin',ty_real,ty_real,ty_real);
global.ddd =
external_define1('MYOWN.DLL',DoubleString,ty_string,ty_string);
}
Теперь всякий раз, когда тебе нужно вызывать функции, используй пример.
{
aaa = external_call2(global.mmm,x,y);
sss = external_call1(global.ddd,'Hello');
}
Далее приводятся вызывающие функции:
external_call0(id) - Вызывает внешнюю функцию с данным идентификатором, который не имеет никаких параметров.
external_call1(id,arg1) - Вызывает внешнюю функцию с данным идентификатором, который имеет один параметр.
external_call2(id,arg1,arg2) - Вызывает внешнюю функцию с данным идентификатором, который имеет два параметра.
Обрати внимание, что DLL не может использоваться в безопасном (secure) режиме.
Использование внешних DLL - чрезвычайно мощная функция. Но пожалуйста используй
их, только если ты действительно уверен в том что делаешь. Некоторые обучающие
программы повествующие о плагинах Game Maker возможно появятся в будущем.
© 2001 Simple Life & World
|