Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 855

 

Все-таки для меня важно получить ответ на поставленные вопросы.

Для методов CTrade::Buy, CTrade::Sell, CTrade::ClosePosition

Означает ли, что в случае возврата false нужно игнорировать Retcode?

Означает ли, что в случае возврата true Retcode всегда заполнен корректным значением?

Спасибо.

 

Коллеги, помогите разобраться. 

Пытаюсь осилить работу с реестром, накидал простенький советник для теста. Чтение данных из системного реестра проходит без проблем, а вот с записью возникают проблемы, происходит креш МТ и памяти... (((

Может у меня уже глаз замылился и я не вижу очевидного...

Файлы:
TestReg.mq5  25 kb
 
Алексей Барбашин:

Коллеги, помогите разобраться. 

Пытаюсь осилить работу с реестром, накидал простенький советник для теста. Чтение данных из системного реестра проходит без проблем, а вот с записью возникают проблемы, происходит креш МТ и памяти... (((

Может у меня уже глаз замылился и я не вижу очевидного...

Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.

 
. ... Rick D. ... .:

Тут должно быть все просто. Перед и после каждого обращения к API функции выводить что-нибудь в лог. После креша из логов станет понятно место падения.

Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(

 
Алексей Барбашин:

Так лог и записаться не успеет, терминал закрывается с ошибкой. (( Я предполагаю что происходит утечка памяти. Но при этом нет использования динамических объектов (new). Прям не знаю как с этим бороться и выявлять подобные проблемы ;(

Я тут немного подшаманил ваш пример.
Файлы:
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
Я тут немного подшаманил ваш пример.

Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))

 
Алексей Барбашин:

Я ... шокирован, приятно шокирован. Поставил Ваше изменение сразу на несколько графиков для обеспечения асинхронной нагрузки на реестр.... Все работает стабильно. Вы изменили принцип передачи параметров в API, то есть там, где используются возвращаемые значения, там Вы применили массивы с передачей по ссылке, что в mql означает передачу адреса, или указателя с точки зрения с++. Но я посчитал данный подход, описанный еще 10 лет назад, анахронизмом, ведь все простые типы данных в API и так передаются по ссылке.... Но видимо это было моей ошибкой и недальновидностью, значит простые типы не так уж и безболезненно передаются в API. Большое спасибо что направили на путь истинный! )))

Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.

Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры.
Может еще какие другие отличия найдете.

 
. ... Rick D. ... .:

Когда-то под МТ4 учили передавать указатели в API функции через одномерные массивы. Если что-то изменилось на текущий момент, и кто-нибудь может это подтвердить, то я буду использовать новый подход.

Но у вас еще с типами было напутано. В частности, long в Windows и в MQL5 имеют разные размеры.
Может еще какие другие отличия найдете.

Я увидел все отличия))) Большое спасибо!

Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

Я увидел все отличия))) Большое спасибо!

Вопрос только по размеру хранимых в реестре данных. Согласно примера из документации (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) можно хранить немного больше данных, чем в исправленном файле (ushort buff[1024];). Я верно понимаю?
Верно. Данных может быть больше. Для больших данных правильно сначала запрашивать длину, потом динамически изменять размер массива, затем уже получать все данные.
 
. ... Rick D. ... .:
Верно. Данных может быть больше. Для больших данных правильно сначала запрашивать длину, потом динамически изменять размер массива, затем уже получать все данные.

Хм... вероятно я не совсем внимательно смотрел API, но не заметил такой функции.... А было бы скорее всего удобно. 

Может еще подскажете... возможно вопрос слишком .. нелепый... Как число, например double, перевести в массив char? То есть в некоторых API требуется передавать числа в виде указателя. Указатели передаются в виде одномерных массивов... Со строками понятно, для них предусмотрены функции StringToShortArray и StringToCharArray, а вот с числами я пока не понял как их переводить в байтовые массивы (char).