Вылетает MT5 Terminal после обновления до build 597 - страница 2

 
mql5:
Креш действительно может не сформироваться при падении в коде EX5 программы.

Что за "некоторое время" Вы упоминаете в своём сообщении?

Попробуйте обложить логами места вызова DLL функций ("начинаем вызов SomeDLLFunc"/"вызов SomeDLLFunc завершён", можно и счётчик вызова добавить).

"некоторое время" - это значит, что после запуска терминала, скриптов и экспертов он работает еще сколько-то (величина неизвестная - варьируется примерно от 10 минут до примерно 4-6 часов).

Пробовал обложить логами, в результате логи были по 300-400 Мб за несколько минут, так как у меня в цикле происходит постоянное обращение к функции чтения данных из БД на предмет наличия обновлений - так что формировать такой лог не вариант.

 

Итак вот к чему привели меня мои исследования:

обрезал dll и советник до того, что пришел к выводу о падениях MT5.

Данное действие повторяется у меня на Windows Server 2008 R2 Standard Service Pack 1 x64 (16 Гб ОЗУ, 4 CPU по 2,5 GHz)

dll написана на Delphi, вот код:

library crash_dll;

uses
  SysUtils,
  Classes;

{$R *.res}

function test_proc: integer; stdcall;
var
  lv_result: integer;
begin
  lv_result := 0;
  try
    raise Exception.Create('Error Message');
    lv_result := 1;
  except on E:Exception do
    begin
      lv_result := -1;
    end;
  end;

  result := lv_result;
end;

exports test_proc name 'test_proc';

begin
end.

 Как видно из кода внутри try ... except указан raise Exception, который должен перехватиться - в терминале на Windows 7 все так и происходит, результат выполнения советника = -1, однако на Windows Server 2008 R2 терминал просто валится.

Вот код советника:

#property copyright ""
#property link      ""
#property version   "1.00"

#import "C:\\its\\library\\crash_dll.dll"
int test_proc();
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   int lv_return;

   lv_return = test_proc();
   Print("return: ", lv_return);

   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

 Почему так происходит?

Прикрепил скомпилированную dll к посту. 

Файлы:
crash_dll.zip  214 kb
 
Терминал x64 или x86?
 
mql5:
Терминал x64 или x86?

Терминал x86 в среде x64

Это необходимо, так как dll 32 бита. Delphi XE не умеет 64 битные собирать.

Но Windows 7 у меня x64 и терминал тут тоже x86 - все работает. 

 
mql5:
Терминал x64 или x86?

В сервисдеске я заявку создал. 

Появились какие-то идеи?

 
up
 
Вашу заявку приняли, разбираемся.
Причина обращения: