Релизу Lazarus-3.0 и бессоннице посвящается

23 декабря 2023, 00:17
Maxim Kuznetsov
0
129

Раз уж на форуме упомянулся Lazarus, у которого сегодня релиз. Набросаю микро-DLL на паскале, глядишь кому и пригодится

Сам по себе Lazarus берётся тут: https://www.lazarus-ide.org/

Дальше всё до элементарного просто, кликаем "меню/файл/создать" и выбираем "библиотека"

Простейший код на Паскале:

library sumoftwo;

{$mode objfpc}{$H+}

uses
  Classes
  { you can add units after this };


{ пример экспортируемой функции
  соблюдаем разрядность параметров: double он и в африке double,
  соглашения о вызовах - stdcall
  функция экспортируема
  ---
  !! 1. ни в коем случае в DLL не вызывать Writeln - консоль закрыта,
  !! любая запись приведёт к краху
  !! 2. все исключения должны быть перехвачены
}
function SumOfTwo(one:double;two:double):double;stdcall;export;
begin
  try
     Result:=one+two;
  except
     begin
          Result:=0;
     end;
  end;
end;

{ не забыть - список экспортируемых функций
  в паскале так принято
}
exports
       SumOfTwo;


begin
end.
     

в IDE компилируем (Ctrl-F9)

копируем полученную DLL в каталог MQL5/Scripts

и пишем скрипт:

#property copyright "Maxim A.Kuznetsov"
#property link      "https://www.luxtrade.tk"
#property version   "1.00"

#import "sumoftwo.dll"
double SumOfTwo(double one,double two);
#import

void OnStart()
{
   double one=1.0;
   double two=2.0;
   double res=SumOfTwo(one,two);
   PrintFormat("%f+%f=%f (should be %f)",one,two,res,one+two);
}

запускаем, смотрим результат:

2023.12.23 02:00:08.105 SumOfTwo (GBPUSD,M5) 1.000000+2.000000=3.000000 (should be 3.000000)

то есть в принципе всё элементарно.

Теперь можем использовать не только C/C++ но и довольно продвинутую IDE со всеми компонентами FreePascal (базами,сокетами,потоками и прочая-прочая). 

И заодно поздравляю команду Lazarus с релизом