
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
в либе не сделано привязки к секциям, так как теоретически код может выполнятся в разных процессах.
Для контроля юзайте или ваш вариант или например https://www.mql5.com/ru/code/1835
Я правильно понял, что если мютекс именованный, то я могу получить его хэндл из любого процесса, а не только из метатрейдера?
Вопрос автору.
Использую класс в мт4. Если выключить и включить терминал то все перестает работать. Выход не очень удобный удалить советники перед выключением и прикрепить после включения терминала. Можно ли как нибудь обойти эту проблему.
И второе. Не получается считать файловое отображение созданное программой написанной в делфи. Какие могут быть ньюансы.
Вкратце, это торговые панели работающие на множество терминалов.
Если выключить и включить терминал то все перестает работать. Выход не очень удобный удалить советники перед выключением и прикрепить после включения терминала. Можно ли как нибудь обойти эту проблему.
надо логировать и посмотреть что происходит с файлами при такой деинициализации. нет ли каких то локов.
Не получается считать файловое отображение
какая функция из винапи подразумевается под "считать"?
надо логировать и посмотреть что происходит с файлами при такой деинициализации. нет ли каких то локов.
какая функция из винапи подразумевается под "считать"?
Дело в том что функция
всегда возвращает значение 0.
Поэтому я не могу толком понять открыт ли файл.
На картинке выше лог открытия эксперта который открывает не созданное еще файловое отображение. И никаких ошибок.
Может быть функцию
CMemMapFile::Open
вставлять не в int OnInit(), а дальше где нибудь например в OnTick() но так как возвращаемый хэндл всегда 0 то нет возможности сделать проверку чтобы не открывать файл постоянно с каждым тиком.
И по второму вопросу.
В делфи создается приложение которое создает файловое отображение. При подключении возникают ошибки. А именно Не правильно переданные числа. Начал ровнять с помощью {$Align Off}
пошли другие ошибки типа Access violation read to 0x04E91000 in 'msvcrt.dll' .
Сейчас данные выровнял нормально по 19 байт - "00:35:50.260 Панель v 1.00 GBPUSD.m,M5: OnInitsizeof(PipeData)= 19"
но при чтении все данные по нулям.
Дело в том что функция
всегда возвращает значение 0.
Поэтому я не могу толком понять открыт ли файл.
все верно, CMemMapFile::Open возвращает код ошибки или 0 когда ошибки нет.
(в отличии от CMemMapApi:, которая вернет открытый хендл, а ошибку запишет в переданный параметр)
А хендл лежит в m_hmem
В делфи создается приложение которое создает файловое отображение. При подключении возникают ошибки. А именно Не правильно переданные числа.
учитываете ли вы зарезервированные DWORD байт в начале файла ?4 байта? попробую, не учитывал
посмотрите как происходит запись или создание файла в исходнике.
на параметр m_size
все верно, CMemMapFile::Open возвращает код ошибки или 0 когда ошибки нет.
(в отличии от CMemMapApi:, которая вернет открытый хендл, а ошибку запишет в переданный параметр)
А хендл лежит в m_hmem
учитываете ли вы зарезервированные DWORD байт в начале файла ?это m_hmem при открытии несуществующего файлового отображения. Как определить это ошибка или хэндл?
это m_hmem при открытии несуществующего файлового отображения. Как определить это ошибка или хэндл?