void start() { int hfile,count,_temp2; double _temp3,_temp4,_temp5; string temp1="123456",temp2="1",temp3="123456",temp4="aaa123456",temp5="123456789";
И все работает.
Вначале я подумал, что авторы компилятора вложили логику,
что компилятору становится скучно считывать похожие названия переменных.
Но потом оказалось, что нужно внести какое-то разнообразие в содержимое буферов.
.
P.S.: Увы это не шутка.
Потому что не смешно, а грустно.
Да, заработало, спасибо. Но пришлось более изобретательней разнообразить начальную инициализацию переменных.
И у Вас кстати на картинке глюк еще не полностью прошел. Имею ввиду значения пары GBPJPY, а далее выводит 100.00
Да, заработало, спасибо. Но пришлось более изобретательней разнообразить начальную инициализацию переменных.
И у Вас кстати на картинке глюк еще не полностью прошел. Имею ввиду значения пары GBPJPY, а далее выводит 100.00
Ага :-). Он подменяет значение переменной temp1 :-).
Talex, мазохист Вы наш, ну и зачем Вы это делаете, если оно у Вас в руках сыпется?!? :-)
АААААААА!!!!!!!
Я понял!!!! :-)
Это же они- как в джаве- сделали стринг пул- оптимизацию строковых литералов!!!
Только в джаве все строчки immutable и буфера свои никому не открывают.
В итоге все строки, инициализируемые одинаковыми значениями, ссылаются на одну и ту же область памяти!!
.
Это не ошибка, это оптимизация! :-)
В общем, юзера дураки! :-)
.
Короче, кто умный- посмотрит код метатрейдера и напишет генератор рандомных
(можно, кстати, и не рандомных) строк заданной длины под буфера для работы с API! :-)
Ну вот так и передавать- задавать им разные значения :-)).
А вот по поводу генерации строк- я не угадал :-(.
.
У кого был краш с передачей строк из Dll?
.
Надо писать вот так:
string ДляВызоваDllНомер1 = "Текст1";
string ДляВызоваDllНомер2 = "ДругойТекст";
string ДляВызоваDllНомер3 = "ТретийТекст";
.
И в коде
string res;
if(Вызов == 1) { dll(ДляВызоваDllНомер1); Вызов++; res = ДляВызоваDllНомер1; }
if(Вызов == 2) { dll(ДляВызоваDllНомер2); Вызов++; res = ДляВызоваDllНомер2; }
if(Вызов == 3) { dll(ДляВызоваDllНомер3); Вызов++; res = ДляВызоваDllНомер3; }
.
Это, конечно же, шутка, но с долей правды :-)
.
См. приложение- измененные строки у меня из Dll вообще ничего не смогли вернуть.
Вот где-то так надо делать.
.
Типа, вызываем левую функцию-посредник.
Она у себя в scope имеет длинную строку.
Забавно- но операции все равно будут идти над одним и тем же буфером (гы-гы)...
Это однозначно новая концепция scope ;-).
Ты туда заходишь- а там после объявления переменной и инициализации *константой* значение с прошлого вызова :-).
Все возможно потому, что StringSubstr работает без оптимизации :-).
.
Но если MetaEditor еще проверяет нолик в строке... и меняет размер буфера (оптимизация) :-)...
То такая тема во многих случаях загнется :-).
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Передаю информацию между двумя советниками через файл. Вылезла такая хрень. Если я что-то делаю не так покажите, пожалуйста.
Скрипт для проверки
В логе: