Собственно, сабж.
Столкнулся с таким нюансом.
Есть EA который вызывает пару функций к самописной DLL. При запуске ATTACH выполняет, а при убирании с чарта DETACH почему-то не вызывается. Зато вызывается при закрытии терминала.
Это так и должно быть? Раньше при убирании с чарта последней инстанции приходил DETACH от MT4... может я устарел? или логика работы с DLL изменилась все таки?
Спасибо
Скорее всего, не все инстансы выгрузили. У меня такой ступор тоже иногда был, но потом перепроверял. Оказывалось, были еще индикаторы или эксперты, использующие эти DLL. Например, пока окно тестера стратегий не закрыто, а в нем последний тест был с вызовом этой DLL, то она не выгружается. Закрываем окно тестера - DLL выгружается.
Да инстанс единственный... в том то и дело...
Собственно, сабж.
Столкнулся с таким нюансом.
Есть EA который вызывает пару функций к самописной DLL. При запуске ATTACH выполняет, а при убирании с чарта DETACH почему-то не вызывается. Зато вызывается при закрытии терминала.
Это так и должно быть? Раньше при убирании с чарта последней инстанции приходил DETACH от MT4... может я устарел? или логика работы с DLL изменилась все таки?
Спасибо
DllMain .
Насколько понимаю, длл в МТ трактуются как СОМ-объекты. Происходит отложенная выгрузка.
А вообще-то, ИМХО, лучше этой автоматикой не пользоваться, а загружать/выгружать длл вручную через явно прописанные секции. Автоматика нужна, если пишется полноценный плагин, вроде фильтра в фотошопе, который надо подключать/отключать по нескольку раз "на лету".
- citforum.ru
DllMain .
Насколько понимаю, длл в МТ трактуются как СОМ-объекты. Происходит отложенная выгрузка.
А вообще-то, ИМХО, лучше этой автоматикой не пользоваться, а загружать/выгружать длл вручную через явно прописанные секции. Автоматика нужна, если пишется полноценный плагин, вроде фильтра в фотошопе, который надо подключать/отключать по нескольку раз "на лету".
DLL - не трактуются как COM объекты и я не помню что бы dll выгружалась при убирании с графика
Пользоваться DllMain вообще не рекомендую, это крайне опасная и ограниченная вещь даже без дополнительных обвязок метатрейдера
выгрузка происходит если запустить другой советник
У вас нет средств к "ручной" загрузке/выгрузке dll в метатрейдере
Вопрос: зачем вам вообще выгружать dll? она вам как то мешает?
Если речь идет о неких действия при инициализации/деинициализации советника, то проще прокинуть две интерфейсные функции init/deinit, ну и держать инстансы в пуле, если необходимо что либо сделать при деинициализации последнего инстанса, проверяете размер пула и если ноль - делаете
А вообще обращайтесь, мы на нашем проекте fairforex.org уже собаку съели с dll и особенностями взаимодействия с метатрейдером =)
Если в загружаемой библиотеке DLL (или в используемых ею DLL) нет "трюка" предотвращения выгрузки, то DLL должна выгрузиться (вызов DllMain с reason=DLL_PROCESS_DETACH), при выгрузке всех экземпляров MQL программ её использующих.
Возможно, имеется какое-то стороннее ПО, которое предотвращает выгрузку (организовать это несложно).
Если предоставите удалённый доступ (например, через TeamViewer), мы разберёмся с вашим случаем.
Вы также можете создать заявку в сервисдеске и приложить код DLL
Если предоставите удалённый доступ (например, через TeamViewer), мы разберёмся с вашим случаем.
Бывают случаи, что баг на локальной машине, но не ясно, как его воспроизвести. Писать в сервисдеск почти бессмысленно. Можно ли, чтобы через удаленку ко мне подключились разработчики и, во-первых, подтвердили, что баг имеет место быть, а, во-вторых, сделали бы нужный им анализ на моей локальной машине, пока баг присутствует?
Если в загружаемой библиотеке DLL (или в используемых ею DLL) нет "трюка" предотвращения выгрузки, то DLL должна выгрузиться (вызов DllMain с reason=DLL_PROCESS_DETACH), при выгрузке всех экземпляров MQL программ её использующих.
Возможно, имеется какое-то стороннее ПО, которое предотвращает выгрузку (организовать это несложно).
Если предоставите удалённый доступ (например, через TeamViewer), мы разберёмся с вашим случаем.
Вы также можете создать заявку в сервисдеске и приложить код DLL
Даже если есть какие-то "трюки" по предотвращению выгрузки (коих в моем проекте нет), то на последней инстанции DLL_PROCESS_DETACH должна придти. Я конечно проверю сколько инстанций грузится и меняется ли счетчик, возможно в этом проблема...
Просто там еще идет подгрузка .Net объектов, скорее всего это влияет. Попробую на простом примере потестить. Если что отпишусь.
Если там еще цепочка длл, а тем более дотнет, то это все объясняет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Собственно, сабж.
Столкнулся с таким нюансом.
Есть EA который вызывает пару функций к самописной DLL. При запуске ATTACH выполняет, а при убирании с чарта DETACH почему-то не вызывается. Зато вызывается при закрытии терминала.
Это так и должно быть? Раньше при убирании с чарта последней инстанции приходил DETACH от MT4... может я устарел? или логика работы с DLL изменилась все таки?
Спасибо