Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Устанавливай программы из библиотеки прямо в MetaTrader. Это просто!
Stanislav Korotky
17334
Stanislav Korotky 2009.12.28 16:42 

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

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

Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
  • www.mql5.com
Программы MQL5 / Вызов импортируемых функций - Документация по MQL5
MetaQuotes
Админ
24887
Renat Fatkhullin 2010.01.02 16:14  

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


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


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


Andrey Voytenko
22949
Andrey Voytenko 2014.09.28 14:49  

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

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

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

MetaQuotes
Админ
24887
Renat Fatkhullin 2014.09.28 14:54  
avoitenko:

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

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

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

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

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

Andrey Voytenko
22949
Andrey Voytenko 2014.09.28 15:00  
Renat:

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

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

Понятно. Спасибо.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий