Ошибки, баги, вопросы - страница 2578
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет, так не сработало, строка не передается, но и проблем не возникает.
А вот так без нуля сработало, но так плывёт конец строки лишними символами.
Если не сработало, значит на вход подавалась пустая строка. Вариант мой правильный и рабочий, ваш нет.
Вы тупо перезаписывайте буфер с большим запасом, естественно, что захватывается и нужная строка.
PS. Это С, это хардкор, тут форумы курить не стоит, только серьезные издания и доки, только свои мозги.
Этот хардкор (wcslen(data)+1) я уже пробовал, и сейчас попробовал ваш вариант, строка не копируется вообще.
Этот хардкор (wcslen(data)+1) я уже пробовал, и сейчас попробовал ваш вариант, строка не копируется вообще.
А что означает второй параметр в функции memspy_s?
А что означает второй параметр в функции memspy_s?
- длина строки out., только +1 символ, который /000 забыли.
Если не сработало, значит на вход подавалась пустая строка. Вариант мой правильный и рабочий, ваш нет.
Вы тупо перезаписывайте буфер с большим запасом, естественно, что захватывается и нужная строка.
Ну как пустая строка? Когда строка из сокета поступает, в других вариантах хоть и кривая, но она не пустая.
Я не говорю что ваш вариант не правильный, но в вашем варианте вы используете массив строки.
В моём случае это указатель
const wchar_t* data = getData();Сокетная функция возвращает указатель на const wchar_t*
По этому я и грешу на mql баг, потому что уже какие только сишные функции не пробовал, хардкоры с +1 или +2 применял.
Не идёт и всё.
Попробую угадать
- длина строки out., только +1 символ, который /000 забыли.
Если вы имеете ввиду об этом
То строка копируется очень редко, и с большими пропусками по времени.
Этот вариант уже пробовался в самом начале, полистайте пару страниц назад, там я скрины выкладывал.
Вот, такое же поведение как на втором скрине, модеры зачем то имена файлов на кракозябры заменили.
Понимаете, даже вот эта функция wcscpy(out, data); которая автоматически считает длину строки, вызывает такое же поведение, временной пропуск всей строки.
Ну как пустая строка? Когда строка из сокета поступает, в других вариантах хоть и кривая, но она не пустая.
Я не говорю что ваш вариант не правильный, но в вашем варианте вы используете массив строки.
В моём случае это указатель
Сокетная функция возвращает указатель на const wchar_t*
По этому я и грешу на mql баг, потому что уже какие только сишные функции не пробовал, хардкоры с +1 или +2 применял.
Не идёт и всё.
Пишите строки после memcpy() параллельно в файл, если мкл виноват (там ведь какая-то обёртка поверх вызовов с копированием аргументов), то файл не пустой будет, наверное.
ЗЫ: ну так, на всякий случай - в мкл библиотечная функция задекларирована ведь с сылкой ? void fn(string &s)?Пишите строки после memcpy() параллельно в файл, если мкл виноват (там ведь какая-то обёртка поверх вызовов с копированием аргументов), то файл не пустой будет, наверное.
ЗЫ: ну так, на всякий случай - в мкл библиотечная функция задекларирована ведь с сылкой ? void fn(string &s)?Все строки я вывожу или на график в коммент, или в принт терминала, когда строка поступает её сразу видно, в комменте видно кривая она или нет.
В общем по любому траблы с mql-овским string. Испробовано уже и проверено много вариантов.Когда идут большие временные пропуски, то строка на графике редко появляется, а в принте дыры.
Сомнение что не поступает строка из сокета отпадает, тиковые данные поступают с частотой в миллисекунды.
Из сокета getData() приняли в переменную указатель, из переменной указателя сразу копирую в mql, не каких обёрток.
Да задекларирована по феншую ))
Строка из сокета идёт с терминальным нулём, и самая достоверная проверочная функция
показывает проблему именно на mql
В общем поюзаю пока с sizeof(wichar_t*) посмотрю на поведение.
Но наверно чтобы обезопаситься от изменений от MQ, наверно действительно напишу строки на массивах.
Золотые слова. Оно конечно хочется string использовать, но в виду отсутствия стандарта с описанием его реализации и/или поведения при передачи в dll, это чистой воды ub получается. А так, string в short[] и спокойно передаешь массив, единственное, что накладные расходы на создание и копирование массива.
PS. Все-таки, сдается мне, что проблема не в mql, а у Вас в либе. У меня все тесты нормально прошли, да и не чему там по логике глючить, string достаточно тривиальная обертка над wchar_t*, а скорее всего над wstring, что бы там напортачить.
Золотые слова. Оно конечно хочется string использовать, но в виду отсутствия стандарта с описанием его реализации и/или поведения при передачи в dll, это чистой воды ub получается. А так, string в short[] и спокойно передаешь массив, единственное, что накладные расходы на создание и копирование массива.
PS. Все-таки, сдается мне, что проблема не в mql, а у Вас в либе. У меня все тесты нормально прошли, да и не чему там по логике глючить, string достаточно тривиальная обертка над wchar_t*, а скорее всего над wstring, что бы там напортачить.
У меня тоже были сомнения на либу, не чего не исключаю из возможных причин.
Но конвертировал получаемую строку из сокета в ASCII коды, видно что строка корректная.
Дальше идёт простое копирование,
mql не принимает корректно указатель на строку.