Ошибки, баги, вопросы - страница 2579
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Все строки я вывожу или на график в коммент, или в принт терминала, когда строка поступает её сразу видно, в комменте видно кривая она или нет.
В общем по любому траблы с mql-овским string. Испробовано уже и проверено много вариантов.Когда идут большие временные пропуски, то строка на графике редко появляется, а в принте дыры.
Сомнение что не поступает строка из сокета отпадает, тиковые данные поступают с частотой в миллисекунды.
Из сокета getData() приняли в переменную указатель, из переменной указателя сразу копирую в mql, не каких обёрток.
Да задекларирована по феншую ))
Строка из сокета идёт с терминальным нулём, и самая достоверная проверочная функция
показывает проблему именно на mql
В общем поюзаю пока с sizeof(wichar_t*) посмотрю на поведение.
Но наверно чтобы обезопаситься от изменений от MQ, наверно действительно напишу строки на массивах.
Запись в файл - имел в виду на стороне dll, если в файл пишется, а в мкл не попадает, то это уже весомые аргументы с заявлением о баге, может попаравят.
А обёртка есть без вашего желания, MQ скрывают код/адреса от внешнего мира, всё идет не напрямую.
Запись в файл - имел в виду на стороне dll, если в файл пишется, а в мкл не попадает, то это уже весомые аргументы с заявлением о баге, может поправят.
А обёртка есть без вашего желания, MQ скрывают код/адреса от внешнего мира, всё идет не напрямую.
Записал получаемые строки в файл.
Так как сокетная функция возвращает указатель на строку, то в файл пишется указатель на строку, и потом этот указатель копируется в mql.
С помощью функции
Длина получаемой строки 164, в mql выделено 200
Скопированная строка полученная в mql получается ровная по длине, но идут жёсткие пропуски в копировании.
В скрипте mql цикл while крутится с Sleep(1)
Тогда пропусков нет, но скопированные строки получаются не ровные, в конце строки появляются лишние символы.
Добавление wcslen(data)+1 не помогает.
Итог, из всех страниц которые я тут пишу.
mql-овский string не корректно принимает из dll, скопированный указатель на строку const wchar_t*
Правильно, я выделяю буфер под строку out, и инициализирую её пробелами.
Далее передаю эту строку(указатель) в dll.
В dll в out копируются wchar_t* данные, то есть тоже указатель. По логике проблем не должно возникать.
Как я понимаю согласно справке, функция StringInit и должна задавать длину строки.
Но тут ещё с самой функцией StringInit непонятки, указывал длину строки, фигня лезла, указал размер указателя, всё заработало.
Не пойму о какой ручной передаче длины строки вы имели ввиду.
И если использовать sizeof(wchar_t) без указателя, то строка начинает плыть лишними символами, что вызывает проблему с парсингом и утечкой.
Для передачи строк в dll использовался пример Рената, из его статьи как писать dll.
Но вот почему то именно если передаю без указателя sizeof(wchar_t), то строка плывёт, а с указателем sizeof(wchar_t*) проблем нет.
Имне кажется логично, я же копирую строку как указатель, то и размер нужно передавать указателя, а не типа.
Иногда делаешь правильно - не работает.
Делаешь неправильно - кажется, что работает.
В таких случаях надо делать правильно и искать ошибку в другом месте.
Записал получаемые строки в файл.
Так как сокетная функция возвращает указатель на строку, то в файл пишется указатель на строку, и потом этот указатель копируется в mql.
С помощью функции
Длина получаемой строки 164, в mql выделено 200
Скопированная строка полученная в mql получается ровная по длине, но идут жёсткие пропуски в копировании.
В скрипте mql цикл while крутится с Sleep(1)
1. В MQL копируется не указатель, а строка.
2. Вы в MQL выделили строку в 200 символов. Потом скопировали в неё 164 символа. После этого, посмотрите размер строки в MQL. Он остался 200.
Иногда делаешь правильно - не работает.
Делаешь неправильно - кажется, что работает.
В таких случаях надо делать правильно и искать ошибку в другом месте.
По этому чтобы было правильно, я отказался от memcpy, и использовал wcscpy или wcsncpy.
Результат, постом выше.
1. В MQL копируется не указатель, а строка.
Раздел 3.3
2. Вы в MQL выделили строку в 200 символов. Потом скопировали в неё 164 символа. После этого, посмотрите размер строки в MQL. Он остался 200.
Длина а не размер! Длина в символах, размер в байтах.
Проверил, после получения строки из 164 символов, да длина так же осталась 200.
Какие мысли по этому поводу?
По этому чтобы было правильно, я отказался от memcpy, и использовал wcscpy или wcsncpy.
Результат, постом выше.
Я имел ввиду sizeof( wchar_t* ).
Раздел 3.3
Вам бы лучше со мной не спорить, а прочитать повнимательней эту статью. И разобраться, что там происходит.
Тогда и проблем не будет.
То что Вы хотите сделать, на самом деле не так сложно.