Воскресенье, 24.11.2024, 17:55
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
Mess Box [3]
MSB Script [8]
Скриптовой язык MSB
Форма входа
Поиск
Друзья сайта

 

Клуб сайта DIM-S.NET

Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
Главная » Статьи » Mess Box

Создание *.DLL для приложений Mess Box AR
И так начнем...

DLL - это динамическая библиотека написанная на любом языке программирования и используется для взаимодействия разных языков программирования.

В Mess Box AR 3.x и выше была включена возможность подключать такие библиотеки.

Вкратце о механизме подключения:

DLL помещается в папку Package, при запуске приложения все файлы с расширением *.DLL распаковываются в папку Temp и обрабатываются специальной функцией, которая инициализирует все найденные функции и процедуры *.DLL в язык MSBScript. Все библиотеки естественно загружаются динамически и при закрытии приложения благополучно удаляются из папки temp, если это возможно!

Формат функции и процедур для MSBScript'a в Delphi

Т.К. MSBScript писался на Delphi то и взаимодействие с ним более беспрепятственное.

Все функции должны выглядеть следущим образом:

function Func(V:Array of Variant):Variant;
begin
Result:=...
end;

а для команд:

procedure Comm(V:Array of Variant);
begin
.....
end;

Типы ваших функций и процедур обязательно должны соответствовать Variant или родственным, например OleVariant

Даже если нет параметров эти условия обязательны!

В процедуры и функции передаются уже вычисленные MSBScript'om параметры. Существует всего 2 типа параметра - строковой и арифметический, отличаются они методом вычисления.

И так ваше dll должна выглядеть так:


liblary MSBDll

{}


uses
SysUtils;


procedure Term(V:Array of Variant); stdcall;
begin
Halt;
end;

function Summa(V:Array of Variant):Variant; stdcall;
begin
Result:=StrToInt(V[0])+StrToInt(V[1]);
end;

// Название функций в самой dll - MSBDll
function InfoFunc:PChar; stdcall;
begin
Result:='Summa'+#13#0;
end;

// Название функций для MSBScript'a
function NameFunc:PChar; stdcall;
begin
Result:='SUMMA(EXP,EXP)'+#13#0;
end;

// Название команд для MSBScript'a
function NameProc:PChar; stdcall;
begin
Result:='Term'+#13#0;
end;


// Название процедур в самой dll - MSBDll
function InfoProc:PChar; stdcall;
begin
Result:='TERM';
end;


exports

// Обязательно!!!
InfoProc, InfoFunc, NameProc, NameFunc,

// Ваши функции и процедуры
Term, Summa;

begin

end;



И Так в вашей DLL обязательно должны быть 4 фунции: 2 для функции и 2 для команд, даже если данные отсутствуют.

Перечисление команд и функции идет через символ #13 - новая строка, и все это дело заканчивается (на всякий случай (: ) символом #0.

EXP - это арифметический параметр
STR - это строковой параметр

Когда вы описываете свои функции и команды в NameFunc и NameProc вы должны указать по какому типу будут вычисляться параметры. Максимальное количество параметров 9!

После написания библиотеки жмем кнопочку Build, находим свою DLL-ку и кидаем ее в папку Package, затем можем свободно пользоваться в MSB Проектах всеми описанными командами в NameProc и NameFunc.

Например так:

Message("Сейчас мы выйдем!");
Term;

Категория: Mess Box | Добавил: Dim-S (29.10.2007)
Просмотров: 1048 | Комментарии: 3 | Рейтинг: 4.5/2 |
Всего комментариев: 3
3 ily2811  
0
кстати я писал в паскале вот это то что тут написано он не понимает кучу слов одни ошибки при запуске если чё у меня ABC паскаль tongue

2 Dim-S  
0
Что-то я боюсь над совместимостью надо поработать, а то я не пробовал в С++ делать, и возможно передача параметров-массивов может происходить неправильно... dry

Я знаю что в делфи есть дирректива Pascal, для обратной совместимости, а stdcall можно не использовать если пишется на дельфи.


1 Crut  
0
Возможо скоро появится эта - же статья но для написания модулей на C++. biggrin
P.S. Эксперементирую

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Хостинг от uCozDim-S Software © 2004-2024. Все права защищены.
support@dim-s.net