Выпущена бета-версия MetaTrader 4 Build 582 с обновленным языком MQL4 и Маркетом приложений - страница 47

 

Здравствуйте! До обновления нижеприведённый код выключал компьютер.Теперь нет. Почему? Опишите как в новой версии выключать компьютер из советника..

//+------------------------------------------------------------------+
//| ggg01.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

#import "kernel32.dll"
int WinExec(string lpCmdLine,int uCmdShow);
#import
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

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

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
WinExec("shutdown.exe -s -f",1);
}
//+------------------------------------------------------------------+

 
Megan:

Здравствуйте! До обновления нижеприведённый код выключал компьютер.Теперь нет. Почему? Опишите как в новой версии выключать компьютер из советника..

WinExec() не имеет UNICODE-аналога. Надо строку UNICODE-команды преобразовать в ANSI-строку.

Зачем используете устаревшие функции? Пора бы уж на CreateProcess() перейти.

Импорт такой должен быть:

#import "kernel32.dll"
 int WinExec(uchar &lpCmdLine[], int uCmdShow);
#import
 

Здравствуйте,

в 579-м билде, при работе индикатора, написанного на новом MQL4, стала выходить ошибка создания текстовой метки = 4200 (Объект уже существует).

Прилагаю отдельно выделенную мной в тестовый код функцию по созданию текстовой метки (взяла из примера: Справочник MQL4 / Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_LABEL). Выходит такая же ошибка. Ранее подобного не наблюдалось.

Скрин при использовании прилагаемого тестового кода (при работе индикатора такие же сообщения):


Файлы:
 
Zhunko:

WinExec() не имеет UNICODE-аналога. Надо строку UNICODE-команды преобразовать в ANSI-строку.

Зачем используете устаревшие функции? Пора бы уж на CreateProcess() перейти.

Импорт такой должен быть:


Спасибо, что откликнулись) Правильно ли я понял, что WinExec() использовать ни как не получиться и нужно пользоваться CreateProcess()? Советник пишет ошибку тогда" Cannot find 'CreateProcess' in 'kernel32.dll' .Какую DLL указывать ей? И как потом вызвать shutdown.exe ?
 
EVladMih:

Andrei01, я с вами согласен, но может вы объясните мне зачем превращать очень популярный МТ4 в МТ5, который не состоялся?

ИМХО попытка оставить людей без выбора внутри компании приведет к тому, что пусть не все, но МНОГИЕ этот выбор найдут на стороне - разве нет?

Сейчас многие нытики требуют возврата к 509-му билду. Самое смешное, что когда появлялся 509-й билд все те же люди навзрыд кричали, что это крах и агония MQ, и требовали возврата прошлого билда. И так из раза в раз.

Работайте себе спокойно и перестаньте впадать в истерику.

 
DiPach:

Здравствуйте,

в 579-м билде, при работе индикатора, написанного на новом MQL4, стала выходить ошибка создания текстовой метки = 4200 (Объект уже существует).

Прилагаю отдельно выделенную мной в тестовый код функцию по созданию текстовой метки (взяла из примера: Справочник MQL4 / Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_LABEL). Выходит такая же ошибка. Ранее подобного не наблюдалось.

Скрин при использовании прилагаемого тестового кода (при работе индикатора такие же сообщения):



Вы тик за тиком создаёте одну и ту же метку, объект под именем "testtext".

Самое первое создание прошло успешно. А вот все последующие вам говорили: "объект с таким именем уже существует".

 
stringo:

Вы тик за тиком создаёте одну и ту же метку, объект под именем "testtext".

Самое первое создание прошло успешно. А вот все последующие вам говорили: "объект с таким именем уже существует".


Ограничения ставила.

Такие же сообщения выходят.

Тестовый код набросала по быстрому для проверки.

 
 DiPach
:






Перед созданием объекта всегда нужно проверять на наличие объектов с таким именем.

if(ObjectFind("Z")<0) ObjectCreate("Z",.....);
 
valeryk:



Перед созданием объекта всегда нужно проверять на наличие объектов с таким именем.

Спасибо, с этой строкой:
if(ObjectFind("Z")<0) ObjectCreate("Z",.....);

действительно не выходит ошибка 4200.

Но и данные не обновляются в текстовых строках.

Т.е., что вышло на экран чарта при установке индикатора (не тестового кода, что приложила), то так неизменно и остаётся.

 

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

Не выходила она и в более ранних билдах бета-МТ4.
Причина обращения: