Использование DLL библиотек в GML - Форум Игроделов
Пн, 06 Май 2024, 14:22 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » GAME MAKER » МАНУАЛЫ И УРОКИ » Использование DLL библиотек в GML (расширения GM)
Использование DLL библиотек в GML
maxicorpДата: Чт, 25 Фев 2010, 21:28 | Сообщение # 1
 
Сообщений: 24
Награды: 1
Репутация: 65
Статус: Offline
Использование DLL библиотек в GML

В тех случаях когда функциональные возможности GML - не достаточны для Ваших грандиозных планов, Вы можете реально расширить данные возможности, используя плагины. Плагины должны быть в форме DLL файла (Динамически загружаемых библиотек). В таком DLL файле Вы можете определить функции. Такие функции могут быть написаны на любом языке программирования, которые поддерживают создание DLL (например. Delphi, Visual C++, Visual Basic, и т.д.) Для этого Вам необходимо как минимум знать один из таких языков и иметь навык программирования. Плагины с функциями должны иметь специфический формат. Они могут содержать ноль (zero), один или два параметра, каждый из которых может быть вещественным числом (double in C) или строкой с нулевым символом в конце. Они должны возвращать либо вещественную строку, либо строку с нулевым символом в конце.
В 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 xend;
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)- Определяет внешнюю функцию с одним параметром. Так же точно как и в функции приведенной выше, только теперь rg1type - тип первого параметра. Для него также используйте либо ty_real либо ty_string.
external_define2(dll,name,arg1type,arg2type,restype)- Определяет внешнюю функцию с двумя параметрами.
external_define3(dll,name,arg1type,arg2type,arg3type,restype)- Определяет внешнюю функцию с тремя параметрами.
external_define4(dll,name,arg1type,arg2type,arg3type,arg4type,restype)- Определяет внешнюю функцию с четырьмя параметрами.
external_define5(dll,name,restype)- Определяет внешнюю функцию с пятью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define6(dll,name,restype)- Определяет внешнюю функцию с шестью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define7(dll,name,restype)- Определяет внешнюю функцию с семью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define8(dll,name,restype)- Определяет внешнюю функцию с восьмью реальными параметрами. (Строки не могут содержать более 4 параметров).

Каждая из этих функций возвращает идентификатор внешней функции, которая должна использоваться для его вызова. Так в вышеприведенном примере, в начале игры Вы использовали бы следующий 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)- Вызывает внешнюю функцию с данным идентификатором (id), который не имеет никаких параметров.
external_call1(id,arg1)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет один параметр.
external_call2(id,arg1,arg2)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет два параметра.
external_call3(id,arg1,arg2,arg3)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет три параметра.
external_call4(id,arg1,arg2,arg3,arg4)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет четыре параметра.
external_call5(id,arg1,arg2,arg3,arg4,arg5)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет пять параметров.
external_call6(id,arg1,arg2,arg3,arg4,arg5,arg6)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет шесть параметров.
external_call7(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет семь параметров.
external_call8(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет восемь параметров.

Вы возможно не знаете, как пишется функция в DLL, которая что-нибудь делает в игре. Например, Вы захотели создать DLL, которая добавляет образцы объектов в Вашу игру. Самый простой способ состоит в том, чтобы позволить своей функции в DLL возвращать строку, которая содержит часть кода GML. Эта строка, содержащая часть GML, может быть выполнена, используя функцию GML
execute_string(str) - Выполняет фрагмент кода в строке str.
Дополнительно Вы можете позволить DLL создать файл со сценарием, который может быть выполнен (эта функция также может использоваться, чтобы позже изменить поведение игры).
execute_file(fname) - Выполняет фрагмент кода в файле.
Теперь Вы можете вызывать внешнюю функцию и затем выполнить результирующую строку, например следующим образом:
ccc = external_call2(global.mmm,x,y);
execute_string(ccc);
В некоторых, редких, случаях твоей DLL может понадобиться знать о настройках основного графического окна игры. Это можно сделать с использованием следующей функции и тогда может быть использована DLL:
window_handle()- Возвращает настройки окна для основного экрана.
Обратите внимание, что DLL не может использоваться в безопасном (secure) режиме.
Использование внешних DLL - чрезвычайно мощная функция. Но пожалуйста используй их, только если Вы действительно уверены в том что делаете.

автор - Vendet


Сообщение отредактировал maxicorp - Чт, 25 Фев 2010, 21:30
 
СообщениеИспользование DLL библиотек в GML

В тех случаях когда функциональные возможности GML - не достаточны для Ваших грандиозных планов, Вы можете реально расширить данные возможности, используя плагины. Плагины должны быть в форме DLL файла (Динамически загружаемых библиотек). В таком DLL файле Вы можете определить функции. Такие функции могут быть написаны на любом языке программирования, которые поддерживают создание DLL (например. Delphi, Visual C++, Visual Basic, и т.д.) Для этого Вам необходимо как минимум знать один из таких языков и иметь навык программирования. Плагины с функциями должны иметь специфический формат. Они могут содержать ноль (zero), один или два параметра, каждый из которых может быть вещественным числом (double in C) или строкой с нулевым символом в конце. Они должны возвращать либо вещественную строку, либо строку с нулевым символом в конце.
В 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 xend;
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)- Определяет внешнюю функцию с одним параметром. Так же точно как и в функции приведенной выше, только теперь rg1type - тип первого параметра. Для него также используйте либо ty_real либо ty_string.
external_define2(dll,name,arg1type,arg2type,restype)- Определяет внешнюю функцию с двумя параметрами.
external_define3(dll,name,arg1type,arg2type,arg3type,restype)- Определяет внешнюю функцию с тремя параметрами.
external_define4(dll,name,arg1type,arg2type,arg3type,arg4type,restype)- Определяет внешнюю функцию с четырьмя параметрами.
external_define5(dll,name,restype)- Определяет внешнюю функцию с пятью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define6(dll,name,restype)- Определяет внешнюю функцию с шестью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define7(dll,name,restype)- Определяет внешнюю функцию с семью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define8(dll,name,restype)- Определяет внешнюю функцию с восьмью реальными параметрами. (Строки не могут содержать более 4 параметров).

Каждая из этих функций возвращает идентификатор внешней функции, которая должна использоваться для его вызова. Так в вышеприведенном примере, в начале игры Вы использовали бы следующий 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)- Вызывает внешнюю функцию с данным идентификатором (id), который не имеет никаких параметров.
external_call1(id,arg1)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет один параметр.
external_call2(id,arg1,arg2)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет два параметра.
external_call3(id,arg1,arg2,arg3)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет три параметра.
external_call4(id,arg1,arg2,arg3,arg4)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет четыре параметра.
external_call5(id,arg1,arg2,arg3,arg4,arg5)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет пять параметров.
external_call6(id,arg1,arg2,arg3,arg4,arg5,arg6)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет шесть параметров.
external_call7(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет семь параметров.
external_call8(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет восемь параметров.

Вы возможно не знаете, как пишется функция в DLL, которая что-нибудь делает в игре. Например, Вы захотели создать DLL, которая добавляет образцы объектов в Вашу игру. Самый простой способ состоит в том, чтобы позволить своей функции в DLL возвращать строку, которая содержит часть кода GML. Эта строка, содержащая часть GML, может быть выполнена, используя функцию GML
execute_string(str) - Выполняет фрагмент кода в строке str.
Дополнительно Вы можете позволить DLL создать файл со сценарием, который может быть выполнен (эта функция также может использоваться, чтобы позже изменить поведение игры).
execute_file(fname) - Выполняет фрагмент кода в файле.
Теперь Вы можете вызывать внешнюю функцию и затем выполнить результирующую строку, например следующим образом:
ccc = external_call2(global.mmm,x,y);
execute_string(ccc);
В некоторых, редких, случаях твоей DLL может понадобиться знать о настройках основного графического окна игры. Это можно сделать с использованием следующей функции и тогда может быть использована DLL:
window_handle()- Возвращает настройки окна для основного экрана.
Обратите внимание, что DLL не может использоваться в безопасном (secure) режиме.
Использование внешних DLL - чрезвычайно мощная функция. Но пожалуйста используй их, только если Вы действительно уверены в том что делаете.

автор - Vendet

Автор - maxicorp
Дата добавления - 25 Фев 2010 в 21:28
Форум Игроделов » GAME MAKER » МАНУАЛЫ И УРОКИ » Использование DLL библиотек в GML (расширения GM)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024