Хранить недопустимо "\0" обрезает строку после него, ЕМНИП, с остальными вроде проблем нет.
Передавать строку, принимать указатель на char (wchar_t в новых билдах) если C++. В итоге в дллке будет нормальная 0-строка, с которой можно нормально работать.
Только передавать по одной. Массив строк в новых билдах я не знаю можно ли передать.
1. Стоит задача обмениваться с DLL "массивами" данных различных типов. Например, отправить аргументом в функцию DLL calculate(arg1) такой массив:
- 2014-01-23 11:03:00
- "Карл у Клары украл кораллы"
- -1.64234
- 1.64245
- 100500
- True
- False
2. То есть, массив данных различного типа нужно отправить как значение аргумента arg1. Следовательно, этот нужно эти разнотиповые данные упаковать в какой-то универсальных тип (очевидно, массив строк) с мета-информацией. Например:
string data[8]; data[0] = "datetime,string,double,double,integer,bool,bool"; data[1] = "Карл у Клары украл кораллы"; data[2] = "2014-01-23 11:03:00"; data[3] = "-1.64234"; data[4] = "1.64245"; data[5] = "100500"; data[6] = "1"; data[7] = "0";3. Прошу порекомендовать решения у тех, кто такую задачу решал. И ответить на следующие вопросы:
- Есть ли в MQL4 возможность работать со строками длиннее 255 символов?
- Есть ли символы, которые недопустимо хранить в строках MQL4?
- Стоит ли пытаться делать это через интерфейс DLL или лучше слать через сокет?
1. То не массив. Это структура. В MQL4++ это можно без проблем. Уже совсем скоро релиз.
2. Это сейчас можно передавать, как массив специальных структур. Метаквоты придумали. Но с новым релизом их отменяют. Т.е. передавать можно по-старому с новыми проблемами, но лучше перейти на массив указателей на строки, как во всех нормальных языках.
3.
С любой длиной строк можно работать. Почти с любой. Теперь почти до 2 миллиардов символов :-)) Хватит?
Это обычные строки, как везде. Всё можно. Особенно с 3 февраля. Там юникод будет.
Это Вам решать по задаче.
Хранить недопустимо "\0" обрезает строку после него, ЕМНИП, с остальными вроде проблем нет.
Передавать строку, принимать указатель на char (wchar_t в новых билдах) если C++. В итоге в дллке будет нормальная 0-строка, с которой можно нормально работать.
Только передавать по одной. Массив строк в новых билдах я не знаю можно ли передать.
Обрезает, конечно, если пользовать просто, как с- строки. Можно рассмотреть это, как массив символов. Т.е. не надеятся на автоматический конец строки по нуль-теминатору. Передавать ещё размер строки (массива). Тогда можно и нуль-терминатор передать.
Кстати, в WinAPI полно функций, где передают или принимают строки через один или два нуль-терминатора в буфер или из буфера известного размера.
Обрезает, конечно, если пользовать просто, как с- строки. Можно рассмотреть это, как массив символов. Т.е. не надеятся на автоматический конец строки по нуль-теминатору. Передавать ещё размер строки (массива).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Стоит задача обмениваться с DLL "массивами" данных различных типов. Например, отправить аргументом в функцию DLL calculate(arg1) такой массив:
Прошу порекомендовать решения у тех, кто такую задачу решал. И ответить на следующие вопросы: