Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 6

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В общем, мне не удалось повысить скорость вычислений с помощью dll более чем в 2.5 раза. Это говорит о высокой скорости MQL5, и для большинства трейдерских задач нет смысла гемороится с dll, за исключением случаев, когда необходимо защитить код, и когда необходимы "тяжёлые" вычисления.
Ренат, спасибо за статью. Думаю многим она не раз пригодиться. У меня же попутный вопрос связанный с dll. (Терминал 249, редактор 248)
Пример
Имеем либру demo.dll, в ней всего одна функция
Имеем mql скрипт demo.mq5
Компилятор не выдает ни ошибок, ни предупреждений.
Запускаем в терминале, получаем следующее
При проверке в визул дебуге обнаружил еще что в саму функцию demo.dll приходит не строка а ее первый символ.
Вопрос
В чем проблема? Как по-человечески передать строку из MQL в dll?
Используйте wchar_t вместо char
wchar_t уже проходили, не помогает. Проблема то кроется в самом mql.
Что это за код? Копирование указателя - это всего лишь копирование 4 байт памяти, содержащей адрес.
В этом случае Вам может помочь memcpy, если Вы заранее (в программе на MQL5) позаботитесь о распределении необходимого буфера в приёмной строке.
Что это за код? Копирование указателя - это всего лишь копирование 4 байт памяти, содержащей адрес.
В этом случае Вам может помочь memcpy, если Вы заранее (в программе на MQL5) позаботитесь о распределении необходимого буфера в приёмной строке.
Да причем тут указатель то. Этот код прекрасно работает в mql4. C переходом на mql5 уже нет.
Тут все дают советы, но хоть бы один показал реально работающий пример как передать в dll функцию строку из mql5?
...
Вопрос
В чем проблема? Как по-человечески передать строку из MQL в dll?
1) Спасибо за сообщение. Ошибка исправлена. Ждите обновлений.
2) Вам правильно подсказали про wchar _t - строки в MQL5 юникодные
3) Что значит "При проверке в визул дебуге"?
4) Правильно использовать так:
Спасибо вам за то что помогаете таким горе-программистам как я. :) Ваш пример внес определенную ясность в мою ситуацию.
Воспрянув духом, решил написать(а вось кому пригодиться) функцию для конвертации строки из wchar_t в старую добрую char. Эта функция может понадобиться тем у кого в проектах очень много кода использует тип char. А поскольку MQL5 передает только wchar_t, то проще конвертнуть на входе чем переписывать пол кода dll.
Спасибо вам за то что помогаете таким горе-программистам как я. :) Ваш пример внес определенную ясность в мою ситуацию.
Воспрянув духом, решил написать(а вось кому пригодиться) функцию для конвертации строки из wchar_t в старую добрую char. Эта функция может понадобиться тем у кого в проектах очень много кода использует тип char. А поскольку MQL5 передает только wchar_t, то проще конвертнуть на входе чем переписывать пол кода dll.
DLL-функции, которые принимают строки в виде char *, конечно же принимают указатель на первый элемент массива типа char. То есть, при описании импорта таких функций в MQL5-программе надо использовать чаровский массив в качестве строкового параметра.
Для таких случаев мы предусмотрели функцию StringToCharArray, которая правильно конвертирует строки в национальном алфавите. Функция wcstombs не всегда это делает правильно.
Статья интересная и полезная.
1) То что прилагаются исходники - это круто. Хех, тока вот где же откомпилированная DLL? Понятно что Мегапрогеру её создать не проблема.
А если я не Мега и не прогер?! :)
2) В статье используется MS компилятор. А я с ним не дружу.:) У меня BC++. Можно ли выложить исходники заточенные для него?
(ИМХО , наверное лучше сразу всегда выкладывать исходники для MS и BC - это две ведущие компании, но стили написания исходников у них разные).