![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Угу, и данные поступают уже минимум на след тике, а по таймеру уже возможно и позднее. И, если работать со стаканом, ваша заявка повисает в воздухе.
Вы вообще о чём? Длл и многопоточность то тут при чём?
Какие данные? На каком ещё тике? С каким стаканом?? Вы вообще о чём? Длл и многопоточность то тут при чём?
Ну, если вы данные не для работы на рынке обрабатываете, тогда ни при чем.)
Ну, если вы данные не для работы на рынке обрабатываете, тогда ни при чем.)
Вообщем разговор ни очём. Обращайтесь, если вы уйдёте дальше теории и вам нужно будет организовать колбеки,пустить потоки или вернуть строки :)
Вообщем разговор ни очём. Обращайтесь, если вы уйдёте дальше теории и вам нужно будет организовать колбеки,пустить потоки или вернуть строки :)
Уже все организовано.)) Чары в ДЛЛ, оттуда через ТСР-клиент в ЕХЕ-приложение. Из приложения тем-же путем обратно.
Кого такая организация системы заинтересует, могу дать часть исходников. Stanislav Dray это не надо, ему это ни о чем.))
Пишу dll, из которой надо перегонять строки в MQL (NULL-terminated ANSI).
Понятно, что существует способ в стиле WinAPI: в один запрос спросить у dll требуемую длину строки, потом подготовить приёмный буфер достаточной длины, и во второй запрос попросить dll скопировать строку в этот буфер.
Но:
- очень уж кривенький способ - изящество отсутствует напрочь;
Этот способ не кривенький, а вполне нормальный.
Хотите изящный, напишите свой класс DLLString, использующий для выделения памяти для строки, системные функции GlobalAlloc(), GlobalFree().
И Вы сможете свободно передавать его в функции и возвращать из функций.
Как-то от темы сильно отклонились.
Для бОльшей ясности: система у меня построена и работает уже несколько лет. Но изредка крошится (обычно при закрытии терминала). Сейчас я её переписываю и покрываю тестами.
Обнаружил, что MQL жрёт следующее:
Может void* можно сконвертировать в указатель на массив чаров?Не зло - это сказать компилятору MQL, чтобы он принял из dll указатель, и отдать этот указатель в CharArrayToString.
а вы понимаете что у массива тоже есть внутреннее представление?
Может void* можно сконвертировать в указатель на массив чаров?
memcpy с нужной сигнатурой
а вы понимаете что у массива тоже есть внутреннее представление?
Хм. В самом деле.
Стремление к изяществу упёрлось в очередной забор... Похоже, окончательно...
memcpy с нужной сигнатурой
memcpy не подходит, т.к. его в MQL нет. А на стороне dll у меня и так руки развязаны...