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;
И Так в вашей DLL обязательно должны быть 4 фунции: 2 для функции и 2 для команд, даже если данные отсутствуют.
Перечисление команд и функции идет через символ #13 - новая строка, и все это дело заканчивается (на всякий случай (: ) символом #0.
EXP - это арифметический параметр STR - это строковой параметр
Когда вы описываете свои функции и команды в NameFunc и NameProc вы должны указать по какому типу будут вычисляться параметры. Максимальное количество параметров 9!
После написания библиотеки жмем кнопочку Build, находим свою DLL-ку и кидаем ее в папку Package, затем можем свободно пользоваться в MSB Проектах всеми описанными командами в NameProc и NameFunc.
Что-то я боюсь над совместимостью надо поработать, а то я не пробовал в С++ делать, и возможно передача параметров-массивов может происходить неправильно...
Я знаю что в делфи есть дирректива Pascal, для обратной совместимости, а stdcall можно не использовать если пишется на дельфи.