Падение клиента MT4 после использования DLL

 

Имеется эксперт, который юзает DLL для долгих расчетов.

DLL прекрасно выполняет свою задачу, возвращает все что нужно.

Далее эксперт использует применение шаблона и в этот момент терминал крашится. (Так же пару раз терминал закрывался после ручного снятия эксперта)

При этом нет окна с ошибкой, в логах терминала (670 build) пусто.

Как выловить то самое что не нравится терминалу и заставляет его закрыться?


З.Ы. Замечено, что если в DLL отключить использование мнопоточности ошибки не возникает. Но сами понимаете, все становится медленно и печально =)

З.Ы.Ы. Эксперт и DLL писаны самостоятельно. На машине где компилится эксперт и DLL проблем нет (Win8), а вот по месту проживания (XP) крашимся...

 
Ребят, ну хоть какие-то мысли?
 
Мысль одна. Нет кода - нет мыслей.
 

Так я не прошу в коде разбираться. Вопрос в том как отловить ошибку, текст ошибки или номер, хоть что-то что поможет понять.

Ну если только код поможет то какую часть кода дать? включение потока в 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 пусто совсем, в лог файле сегодняшнем тоже пусто, но лог файл хотя бы создан...

 
Для начала скомпилируйте свою библиотеку, как приложение. В функции main напишите тесты. Можно легко отладить отладчиком Студии, например, если есть ошибка. Если работать будет, то проблема в МТ4.
 

Работает, в первом посте отметил что библиотека работает.

Терминал крашится только на машине с XP SP1.

Win8 и Win2012 прекрасно работает, никаких проблем.

 

Ну, как же, работает, если говорите, что на XP SP1 не работает?!

Так, работает или не работает?

Сделайте тесты и проверте на ХР без терминала.