![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот ещё со строками странная проблема. Вот такой скрипт (надуманный, просто чтобы показать суть проблемы). Копируем содержимое одной строки в другую через динамическую память средствами WinAPI. Создаём строку-источник, распределяем под неё память с помощью StringInit(), запоминаем размер буфера, записываем в неё некоторый текст. Также создаём строку-приёмник такого же размера. Затем функциями ВинАПИ выделяем в локальной куче память того же размера, что буферы строк, копируем в неё содержимое строки-источника, передавая её в соответствующую функцию по ссылке (при передаче строки по ссылке передаётся адрес её буфера, что нам и нужно), потом содержимое этой памяти копируем в строку-приёмник. Всё это делается внутри функции GetString(), которая и возвращает считанную из памяти строку.
Функция корректно отрабатывает вплоть до выхода, значение возвращаемой строки перед выходом правильное. А вот та строка, которой функция возвращает свой результат, когда правильная, а когда нет: содержит только первую букву, как на скрине ниже. Проблема не постоянная, при отладке обычно не проявляется. Если после отладки кинуть этот скрипт на график, тоже обычно всё нормально, но если после этого перекомпилировать, то эта проблема появляется. Больше всего смущает то, что возвращаемое значение внутри функции перед выходом ВСЕГДА правильное. Что здесь не так? Это баг, или я что-то со строками в МТ не понимаю?
ЗЫ. Билд 610.
Вот ещё со строками странная проблема. Вот такой скрипт (надуманный, просто чтобы показать суть проблемы). Копируем содержимое одной строки в другую через динамическую память средствами WinAPI. Создаём строку-источник, распределяем под неё память с помощью StringInit(), запоминаем размер буфера, записываем в неё некоторый текст. Также создаём строку-приёмник такого же размера. Затем функциями ВинАПИ выделяем в локальной куче память того же размера, что буферы строк, копируем в неё содержимое строки-источника, передавая её в соответствующую функцию по ссылке (при передаче строки по ссылке передаётся адрес её буфера, что нам и нужно), потом содержимое этой памяти копируем в строку-приёмник. Всё это делается внутри функции GetString(), которая и возвращает считанную из памяти строку.
Функция корректно отрабатывает вплоть до выхода, значение возвращаемой строки перед выходом правильное. А вот та строка, которой функция возвращает свой результат, когда правильная, а когда нет: содержит только первую букву, как на рисунке. Проблема не постоянная, при отладке обычно не проявляется. Если после отладки кинуть этот скрипт на график, тоже обычно всё нормально, но если после этого перекомпилировать, то эта проблема появляется. Больше всего смущает то, что возвращаемое значение внутри функции перед выходом ВСЕГДА правильное. Что здесь не так? Это баг, или я что-то со строками в МТ не понимаю?
ЗЫ. Билд 610.
StringBufferLen и возвращает размер в байтах. Но я уже разобрался, в чём дело. Вот в этом: "Если character=0 и размер new_len>0, то будет распределен буфер строки указанного размера и заполнен нулями. Размер строки будет равен нулю, так как весь буфер заполнен терминаторами строки" (из справки к функции StringInit). Инициализировал строки символами нулей, всё заработало.
Непонятно только, почему иногда всё-таки возвращался правильный результат. Ну да ладно, не важно уже.
Ув разработчики, отчего в свойствах индикатора на вкладке COLORS нет возможности менять свойства отображения буферов начиная с 9го? Оч неудобно половину выносить в INPUTS + убеждать пользователя что это фича а не баг. Вы про эту фичу не забыли случайно? Когда/если вспомните, плз рассмотрите возможность вместо номера (индекса) буфера выводить его метку (label), как в MT5 - намного удобней
Буферов-то всего 8, если вы не в курсе ещё.
Видимо это ты где-то пропустил. Ограничение исправлено. Я лично уже один индикатор правил на 10 буферов.
Да, с 613 билда видимо поправили.
Не ссорьтесь. Был всего лишь один билд, где по случайности для списка параметров пользовательских индикаторов был применён код списка параметров экспертов.
Похоже, фича будет востребована. По возможности обратим случайную ошибку в дополнительную возможность
Вот за это спасибо! Буду ждать.
Выпустили бету 616 билда на серверах demo.metaquotes.net:443 и demo.metaquotes.net:444