Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И он отказывается работать, зараза..
попробуйте
в глобальную область видимости вынести и модификатор статик добавьте - возможно, что объект не успевает в рантайм создаваться
тут, в общем какой принцип - объявляете все объекты с модификатором статик, затем при запуске потока создаете все экземпляры объектов и контролируете из MQL? что инициализация экземпляров объектов произошла - если кто ==null , значит подождем
ЗЫ: 5 секунд это много, менее секунды происходит компиляция и запуск .Net - даже на виртуалке
ЗЫЗЫ: как вариант запустите окошко с WinForm - принцип тот же, что в моем примере, получится - двигайтесь дальше ;)
не, ему похоже сам поток создавать не по душе, так как я полностью убрал всё из функции GetSiteInfo, оставив её пустой, а не заработало.
ЗЫ Принцип-то я понял))
не, ему похоже сам поток создавать не по душе, так как я полностью убрал всё из функции GetSiteInfo, оставив её пустой, а не заработало.
глянул повнимательнее Ваш пример - уберитете делегат и сделайте как в моем примере, я кажется первый раз так как Вы писал, и тоже не получилось запустить поток
пожалуйста
;)
хотя как ни странно, именно с этого сайта, который мне нужен - всё равно почему-то не качает его текст(( в C# с этим же кодом скачивает, а здесь в ошибку уходит, я добавил там try catch.. но это видать уже какая-то совсем другая история, хотя должно быть всё равно как-то связано с экспортируемостью
я не знаю как работает сама виртуальная машина .Net , как впрочем и не знаю как происходит запуск .dll из под MQL4
могу лишь предполагать, что различного рода "траблы" возникают из-за выделения памяти - возможно, что используется память МТ ? ...не знаю, гадать тоже устал.... возможно очень не надежная работа при использовании 32-х разрядного МТ4, который вызывает 32-х разрядную .dll на C# и все работает под 64-хразрядной Вин , да еще поток отдельный запущен.... да еще работа всего .Net в рантайме с его зависимостями....
но еще раз - все, что "не взлетело" - оборачивайте в отдельные потоки и запускайте, если работает, то будет и при вызове из МТ4 так же работать - т.е. тестируйте сначала как консольное приложение C# с несколькими потоками, получилось - используйте код в виде .dll
ЗЫ: если все будет вообще совсем грустно - запустите WinForm форму/окно и в его коде запустите все, что не получилось запустить другими способами - будет работать все на 100% !!! .... но это не точно! ))) - я больше недели не мог запустить копирование в буфер обмена, прочитал мануалов стопяцот - но почему то без проблем получилось использовать RichEdit даже без прикрепления к форме, в качестве буфера - буфера обмена.... в общем, что там за столько лет создали Мелкомягкие - никто уже не знает почему и как компоненты работают или не работают как должны )))
ЗЫЗЫ: я .Net 4.7.2 стараюсь использовать для МТ4 - в 99.9 % будет работать без проблем, с другими версиями не всегда все гладко проходит при экспорте для MT4 .... хотя быстрее все писать под МТ5 - но задачи разные бывают
удачи!
Ну ясно... Хотя вот даже банально, чтобы логически понять: как МТ4 может работать по моей DLL Test2, которая размером 7кб и при этом использовать функции HtmlAgilityPack.dll, которая сама по себе размером на порядок выше?
У меня там для разбора сайта есть строчки дальше в функции GetSiteInfo() :
и так далее. Это ж невозможно, надо как-то куда-то по идее эту нужную для работы DLL Агилити добавлять.. или нет.....?
и так далее. Это ж невозможно, надо как-то куда-то по идее эту нужную для работы DLL Агилити добавлять.. или нет.....?
Costura Fody
Получилось идеально то, что было нужно! Costura Fody+обработка всех исключений+достаточное время на создание всех объектов; вот здесь
значение 30 изменил на 100 и все глюки ушли
единственное - срабатывает единожды; потом только перезапуск терминала вручную, чтобы функция снова отрабатывала; может это связано как-то с тем, что неудалённый процесс где-то висит.. судя по Вашему коду мы его нигде не уничтожили; в каком месте кода это лучше сделать? хотя может какая-то другая причина.. заметил, что когда отключаешь советника, оставляя терминал открытым, файл Test2.dll продолжает использоваться терминалом (его невозможно удалить)большое время у Вас на запуск .Net - подозреваю, что Вы сразу и обьекты инициализируете и используете их, чтобы выполнить запрос к серверу
я делю код на инициализацию, затем на необходимые мне функции, затем на остановку потока и уничтожение обьектов - писал выше https://www.mql5.com/ru/forum/364280/page2#comment_21156513
на запуск и на остановку потока нужно предоставлять время .Net
ЗЫ: не все пакеты .Net могут быть выгружены после вызова из МТ4 , иногда бывает, что повторно .dll не запускается без перезагрузки терминала, в МТ5 аналогичные пакеты .Net будут работать без проблем - не разбирался, да и сомневаюсь, что решу этот вопрос, думаю, что архитектура МТ4 так работает