По поводу надежности: проверка сигнатур функций dll перед их вызовом

 

Почитал хелп (например, здесь - https://www.mql5.com/ru/docs/runtime/imports), пытаясь выяснить, насколько безопасно пятерка производит вызовы dll, но не нашел инфы. Просветите плиз.

В MT4 никаких проверок не делается и потому терминал падает при расхождении декларации в заголовке mqh с реальным содержимым dll. А хотелось бы, чтобы в момент загрузки dll проверялось соответствие сигнатур и при несоответствии загрузка обрывалась бы с ошибкой в журнал.

Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
  • www.mql5.com
Программы MQL5 / Вызов импортируемых функций - Документация по MQL5
 

При вызове DLL функций из MQL5 никак не проверяется количество и типы передаваемых параметров. Мы работаем только с фукциями по stdcall соглашениям, у которых фактически на практике в таблице импорта нет описания параметров.


Поддержку __stdcall декорированных имен функций с контролем размера передаваемых данных в стек мы добавим в следующем билде. Я уже написал детальную статью про написание DLL библиотек для MQL5 - выпустим сразу после очередного билда терминала.


Кроме того, в MetaTrader 5 используется защита вызовов внешних DLL и если происходит падение в DLL, то среда выполнения MQL5 это отлавливает и останавливает скрипт, не давая упасть терминалу.

 

Подскажите пожалуйста.

Уже плохо помню, но года два назад читал, что в MQL5 ввели идентификатор который указывался после объявления функции который указывал на передачу параметров через регистры процессора т.е. чистый __fastcall.

Не могу найти этот пост. Если кто видел, пожалуйста ответьте.

 
avoitenko:

Подскажите пожалуйста.

Уже плохо помню, но года два назад читал, что в MQL5 ввели идентификатор который указывался после объявления функции который указывал на передачу параметров через регистры процессора т.е. чистый __fastcall.

Не могу найти этот пост. Если кто видел, пожалуйста ответьте.

Fastcall вызовы работают автоматически в x64 коде МТ5, где это стандартный метод.

В x86 у нас нет поддержки fastcall методов. 

 
Renat:

Fastcall вызовы работают автоматически в x64 коде МТ5, где это стандартный метод.

В x86 у нас нет поддержки fastcall методов. 

Понятно. Спасибо.