Так я не прошу в коде разбираться. Вопрос в том как отловить ошибку, текст ошибки или номер, хоть что-то что поможет понять.
Ну если только код поможет то какую часть кода дать? включение потока в DLL? применение тимплэйта в эксперте?
По мне так ни то ни другое не поможет если не отловить ошибку терминала...
Для общего понимания пример кода. Все исключительно для примера.
DLL
#define _DLLAPI extern "C" __declspec(dllexport) _DLLAPI void __stdcall Func(/* массив MqlRates по ссылке, длина массива, структура по ссылке */) { /* что-то считаем*/ for () { std::thread t1(InternalFunc, /* куча массивов и переменных по ссылкам*/); std::thread t1(InternalFunc, /* куча массивов и переменных по ссылкам*/); t1.join(); t2.join(); if () { } } }
MQL4
#import "name.dll" void Func(/* массив MqlRates по ссылке, длина массива, структура по ссылке */); #import int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { if (!IsTradeAllowed()) { // Bla-bla } else { // В глубине логики вызываем ChartApplyTemplate(0, "\\Files\\" + FileName); // сразу за вызовом выход из OnTick, никакой задержки, никакой доп. логики завершения которой бы ждал бы терминал } }
После применения шаблона терминал схлопывается...
Вопрос именно в том как отловить ошибку терминала, на чем он споткнулся.
UPD: Проверил на VPS Win2012 R2 без ошибок и краха, билд терминала тот же.
После падения посмотрите в каталог /logs/crash и приложите файлы отчетов оттуда, пожалуйста.
В логах нет такого каталога, я догадался проверить.
UPD: может быть есть возможность сторонним софтом проконтролировать момент падения?
UPD2: создал каталог crash в логах в корне каталога MT4 (эксперимента для), прибил все старые лог файлы, терминал ожидаемо схлопнулся. В crash пусто совсем, в лог файле сегодняшнем тоже пусто, но лог файл хотя бы создан...
Работает, в первом посте отметил что библиотека работает.
Терминал крашится только на машине с XP SP1.
Win8 и Win2012 прекрасно работает, никаких проблем.
Ну, как же, работает, если говорите, что на XP SP1 не работает?!
Так, работает или не работает?
Сделайте тесты и проверте на ХР без терминала.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Имеется эксперт, который юзает DLL для долгих расчетов.
DLL прекрасно выполняет свою задачу, возвращает все что нужно.
Далее эксперт использует применение шаблона и в этот момент терминал крашится. (Так же пару раз терминал закрывался после ручного снятия эксперта)
При этом нет окна с ошибкой, в логах терминала (670 build) пусто.
Как выловить то самое что не нравится терминалу и заставляет его закрыться?
З.Ы. Замечено, что если в DLL отключить использование мнопоточности ошибки не возникает. Но сами понимаете, все становится медленно и печально =)
З.Ы.Ы. Эксперт и DLL писаны самостоятельно. На машине где компилится эксперт и DLL проблем нет (Win8), а вот по месту проживания (XP) крашимся...