Скачать MetaTrader 5

DLL

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitry Fedoseev
46928
Dmitry Fedoseev  
DLL написанные для МТ4 дожны работатать в  МТ5 или нет?
MetaQuotes
Админ
25397
Renat Fatkhullin  
Да, если не используются string(они в mql5 - unicode) параметры.
Vladimir Gospodinov
172
Vladimir Gospodinov  
Будут. И не только в терминале, а в любой программе которая ее подключит.
Dmitry Fedoseev
46928
Dmitry Fedoseev  
Не получается. В МТ4 работает. В МТ5: Access violation write to 0x16490CA8
Vladimir Gospodinov
172
Vladimir Gospodinov  
Вы пытайтесь что-то записать по недопустимому адресу.
Ошибка где-то в самой библиотеке либо в неправильной передаче параметров в dll
Dmitry Fedoseev
46928
Dmitry Fedoseev  

Ой, ну хорошо хоть не утечка памяти:)

Как бы так правильно объяснить... Но я ничего ни куда не пытаюсь записывать и не передаю параметры неправильно. Вызваю функцию из dll в мт5, точно так же, как сделано это в мт4 (из той же самой dll), однако в мт4 работает, а в мт5 нет.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
Dmitry Fedoseev
46928
Dmitry Fedoseev  
Строковых параметров нет.
Vladimir Gospodinov
172
Vladimir Gospodinov  
Из статьи  -  Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?


4. Перехват исключений в DLL функциях

Чтобы избежать падения самого терминала, каждый вызов функций DLL автоматически защищается оберткой Unhandled Exception. Этот механизм позволяет уберечься от большинства стандартных ошибок (обращения в недоступную память, деления на ноль и т.д.)

Для проверки работоспособности этого механизма создадим следующий код:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

и вызовем его из терминала:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

В результате произойдет попытка записи в нулевой адрес с генерацией исключения. Терминал его перехватит, сообщит в журнале и продолжит работу:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000
Dmitry Fedoseev
46928
Dmitry Fedoseev  

Если бы писал сам, уж придумал бы что-нибудь... Это готовая dll, откомпилированная, не моя, исходников у меня нет.

Напомню суть вопроса. Есть dll, при использовании ее в МТ4 все работает нормально, в МТ5 не получается ее использовать.

o_o
Модератор
24293
o_o  

Integer:

Есть dll, при использовании ее в МТ4 все работает нормально, в МТ5 не получается ее использовать.

- разные битности пробовал?

- на другом компе пробовал?

- покажи как ты импортируешь и вызываешь (интересует списки параметров)

Nazariy Stapyak
1751
Nazariy Stapyak  

MQL4  - тип bool: Внутреннее представление – целое число размером 4 байт. (int)

MQL5 - тип bool: Внутреннее представление – целое число размером 1 байт.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий