Новая версия MetaTrader 4 Client Terminal build 418 - страница 2

 
VCup:

Приветствую!

После обновления до 418 функции из внешних DLL, возвращающие значения double, возвращают ошибочные значения. Например вместо числа получаю такое значение 1.#IND.

Значения типа int возвращаются нормально.

Перестали работать некоторые индикаторы, использующие эти функции.

Покажите код этих функций.
 
extern "C" __declspec(dllexport) double __stdcall MyFunc(
const double previos_MA,
const double current_MA,
const int shift,
const int timeframe,
const int period,
const int item)
{
double ret_value;
double diff_MA, n;
int current_shift;
//
if (item > 0)
{
diff_MA = previos_MA - current_MA;
current_shift = shift/(period * 60);
}
else
{
diff_MA = 0;
current_shift = 0;
}
n = (diff_MA * current_shift)/(timeframe/period);
ret_value = current_MA + n;

return (ret_value);

}

На 412 все работало нормально

Даже если пишу так return(1.5436), то все равно возвращается ошибочное значение

 
VCup:
extern "C" __declspec(dllexport) double __stdcall MyFunc(
const double previos_MA,
const double current_MA,
const int shift,
const int timeframe,
const int period,
const int item)
{

}

На 412 все работало нормально

Даже если пишу так return(1.5436), то все равно возвращается ошибочное значение

В папке МТ4 есть тестовый пример. Сделайте, как там. У меня всё работает правильно.
 
Zhunko:
В папке МТ4 есть тестовый пример. Сделайте, как там. У меня всё работает правильно.
У меня все так же, как в примере. За исключением вот этого - extern "C". Если это (extern "C") убрать, то все равно не работает.
 
VCup:
У меня все так же, как в примере. За исключением вот этого - extern "C". Если это (extern "C") убрать, то все равно не работает.

Ещё это надо попробывать на всякий случай для чистоты эксперимента:

__declspec(dllexport) double __stdcall MyFunc(double previos_MA, 
                                              double current_MA, 
                                              int shift, 
                                              int timeframe, 
                                              int period, 
                                              int item)
{

}
 
Zhunko:

Ещё это надо попробывать на всякий случай для чистоты эксперимента:

Как Вы предлагаете будет ошибка. По-моему правильно __declspec ... __stdcall. Может что-то с опциями компилятора?
 
VCup:
Как Вы предлагаете будет ошибка. По-моему правильно __declspec ... __stdcall. Может что-то с опциями компилятора?
Это при копировании исчезли подчёркиваеия. Исправил.
 
Увы. Не помогло.
 
VCup:
Увы. Не помогло.
Попозже сделаю чистый тест с нуля.
 

Только что создал DLL из папки samples.

И маленький индикатор:

#property copyright ""

#property link ""

#property indicator_chart_window

#include <sampledll.mqh>

int init()

{

//---- indicators

//----

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int counted_bars=IndicatorCounted();

double M;

M = GetDoubleValue(1.5483);

Comment(M);

return(0);

}

Результат: -1.#IND

Подключил библиотеку ExpertSample.dll из стандартной поставки МТ4. Результат выполнения индикатора тот же -1.#IND

Причина обращения: