Бета-тестирование нового 495 билда MetaTrader 4 - страница 4

 
zdd:
В торговом терминале MetaTrader 4 build 495 и 496 перестали работать импортируемые функции (DLL библиотеки). В MetaTrader 4 build 482 и более ранних версиях работали. Пытался создать заявку в "Сервисдеск" - при нажатии "Сохранить" постоянно пишет "Произошла ошибка" даже без прикрепленных файлов (использовал MSIE 8.0.7601.17514 64 bit, Google Chrome 26.0.1410.64 m, Opera 12.14 Build 1738). Отправлю разработчикам пример советника, DLL библиотеку с исходным кодом и log-файлы (сообщите каким способом).
У меня работают. Может включить разрешение надо?
 
Zhunko:
У меня работают. Может включить разрешение надо?

Все включено. Запускаю build 482 - работает, даю обновиться до build 496 - перестает работать: "17:49:02 proba EURUSD,M1: cannot load library 'getquotes.dll' (error 126)".

Вечером попробую со стандартными DLL библиотеками ОС Windows, а также попробую создать минимальную пользовательскую DLL библиотеку и выложу здесь в качестве примера.

 
zdd:
В торговом терминале MetaTrader 4 build 495 и 496 перестали работать импортируемые функции (DLL библиотеки). В MetaTrader 4 build 482 и более ранних версиях работали. Пытался создать заявку в "Сервисдеск" - при нажатии "Сохранить" постоянно пишет "Произошла ошибка" даже без прикрепленных файлов (использовал MSIE 8.0.7601.17514 64 bit, Google Chrome 26.0.1410.64 m, Opera 12.14 Build 1738). Отправлю разработчикам пример советника, DLL библиотеку с исходным кодом и log-файлы (сообщите каким способом).
Напишите мне в личку и приложите в виде zip файла необходимые файлы, пожалуйста.
 
zdd:

Все включено. Запускаю build 482 - работает, даю обновиться до build 496 - перестает работать: "17:49:02 proba EURUSD,M1: cannot load library 'getquotes.dll' (error 126)".

126 ошибка означает, что не может найтись связанная с этой DLL другая библиотека.

От каких других (кастомных, не системных) DLL библиотек зависит qetquotes.dll ?

 

обновил терминал, включил реал счёт.

открыто 2 позиции евробакс и золото

перетаскиваю ТП и СЛ мышью на евробаксе нормально, удаляю правой кнопкой мыши нормально

перетаскиваю ТП и СЛ мышью на золоте нормально, пытаюсь удалить мышью уровни ТП и СЛ, терминал падает при нажатии правой кнопки мыши

ЗЫ: через окно отправки ордера удаляет нормально

 

Вызов функций из DLL библиотек операционной системы Windows работает, а пользовательские библиотеки перестали работать в build 495 и build 496.

Напишем простейшую пользовательскую библиотеку на языке ассемблера:

.586P
.MODEL FLAT
_TEXT SEGMENT
;---------------------------------------
_START: RET     12                      ; Эта процедура входа вызывается при загрузке и выгрузке динамической библиотеки, в ней мы ничего делать не будем. Так как через стек передается три параметра, при выходе указатель стека перемещаем на 12 байт.
;
Proba1 PROC EXPORT
        MOV     EAX,OFFSET ResultData   ; Это функция, которую будем вызывать из советника. В регистр EAX помещаем адрес строки, которую функция будет возвращать. Так как был передан один параметр, указатель стека перемещаем на 4 байта.
        RET     4
Proba1 ENDP
;----------------------------------------
_TEXT ENDS
_DATA SEGMENT
ResultData      DB      'Answer from DLL.',0
_DATA ENDS
END _START

При помощи ассемблера ml.exe и компоновщика link.exe, входящих в пакет MASM32, компилируем:

ml.exe /c /coff /Cp proba.asm
Assembling: proba.asm

link.exe /subsystem:windows /DLL proba.obj
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

   Creating library proba.lib and object proba.exp
proba.dll : warning LNK4086: entrypoint '_START' is not __stdcall with 12 bytes of arguments; image may not run

 При компоновке мы получили предупреждение,  на работоспособность DLL библиотеки оно, вроде, не влияет (но если кто-то подскажет как бороться с этим предупреждением, буду благодарен).

 Пишем простейший советник:

#import "proba.dll"
   string Proba1(string text1); 
#import

void start()
  {
   string r;
   Print("Calling DLL...");
   r=Proba1("ABCD");
   Print("Result: ",r);
  }

 Запускаем его в MetaTrader 4 build 482. В журнале Expert:

22:44:31 proba EURUSD,M1: loaded successfully
22:44:48 proba EURUSD,M1: Calling DLL...
22:44:48 proba EURUSD,M1: Result: Answer from DLL.
22:44:54 proba EURUSD,M1: uninit reason 1
22:44:54 proba EURUSD,M1: removed 

Даем обновиться MetaTrader 4 до build 496 и запускаем советник. В журнале Expert:

22:45:46 proba EURUSD,M1: loaded successfully
22:45:49 proba EURUSD,M1: Calling DLL...
22:45:49 proba EURUSD,M1: cannot load library 'proba.dll' (error 126)
22:45:49 proba EURUSD,M1: expert stopped
22:45:52 proba EURUSD,M1: uninit reason 1
22:45:52 proba EURUSD,M1: removed

Прилагаю файлы. 

Файлы:
pack1.zip  2 kb
 
Спасибо, проверим
 
sanyooooook:

обновил терминал, включил реал счёт.

открыто 2 позиции евробакс и золото

перетаскиваю ТП и СЛ мышью на евробаксе нормально, удаляю правой кнопкой мыши нормально

перетаскиваю ТП и СЛ мышью на золоте нормально, пытаюсь удалить мышью уровни ТП и СЛ, терминал падает при нажатии правой кнопки мыши

ЗЫ: через окно отправки ордера удаляет нормально

Сервер, инструмент и направление позиции уточните пожалуйста.
И ещё: какой язык интерфейса у клиентского терминала?
 
Renat:

А у нас так и было 7 лет подряд - трейдер мог сам решать. В результате это привело к полному беспределу в версиях.

Renat, сдаётся мне вы упорно не понимаете суть вопроса!

А суть не в том, что не обновляться, а в том чтобы

после обновления терминал самопроизвольно НЕ ПЕРЕЗАПУСКАЛСЯ! 

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

И ещё вопрос сейчас проверка на наличие обновлений и их закачка происходит при запуске терминала (как раньше было) или при работающей без перезагрузок месяц терминал всёравно будет проверять переодически наличие новых версий, скачивать их и перезагружаться?

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

 

ПОЭТОМУ ПЕРЕЗАГРУЗКА ТЕРМИНАЛА ПОСЛЕ ОБНОВЛЕНИЯ ДОЛЖНА БЫТЬ ТОЛЬКО С РАЗРЕШЕНИЯ ПОЛЬЗОВАТЕЛЯ!!! 


 
Alexander:
Сервер, инструмент и направление позиции уточните пожалуйста.
И ещё: какой язык интерфейса у клиентского терминала?

сервер: EGlobal-Cent2 EGlobal-Cent3

инструмент: GOLD

позиция: sell

язык: Russian

ЗЫ: проверил ситуацию ещё раз, как и прежде терминал падает.

Причина обращения: