Вопросы от "чайника" - страница 75

 
kirill-demo:
советник я создавал в мастере. И в mql плохо разбираюсь. Вы бы не могли мне наглядно пояснить на примере envelopes что мне делать?

В классе CSignalEnvelopes не заложена такая рыночная модель.

Вывод: Нужно дорабатывать класс (или писать свой).

 
Чем отличается вызов функций из dll в MT4 от MT5? Компилирую dll, в MT5 замечательно работает, а в MT4 выдает ошибку:

2011.10.06 23:00:34 Solaris executor EURUSDm,M1: cannot call function 'InfoOfTrading' from dll 'Solaris.dll' (error 127)

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
joo:
Чем отличается вызов функций из dll в MT4 от MT5? Компилирую dll, в MT5 замечательно работает, а в MT4 выдает ошибку:

2011.10.06 23:00:34 Solaris executor EURUSDm,M1: cannot call function 'InfoOfTrading' from dll 'Solaris.dll' (error 127)

Приведите описание прототипа функций, пожалуйста. Скорее всего для MT5 Вы использовали _stdcall оформление.

У MT5 более гибкий механизм связывания имен DLL функций - он автоматически поддерживает как _stdcall (более продвинутый с декорированием имени), так и _cdecl (старый классический метод). МетаТрейдер 4 поддерживает только вызовы _cdecl.

Прочтите статью "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - там детально рассказывается об вызовах DLL функций.

 
Renat:

Приведите описание прототипа функций, пожалуйста. Скорее всего для MT5 Вы использовали _stdcall оформление.

У MT5 более гибкий механизм связывания имен DLL функций - он автоматически поддерживает как _stdcall (более продвинутый с декорированием имени), так и _cdecl (старый классический метод). МетаТрейдер 4 поддерживает только вызовы _cdecl.

Прочтите статью "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - там детально рассказывается об вызовах DLL функций.

Попробовал так объявлять:

_DLLAPI void _cdecl InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

и так:

_DLLAPI void InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

вместо прежней:

_DLLAPI void __stdcall InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

но теперь другая ошибка:

2011.10.07 01:35:05    Solaris executor EURUSDm,M1: function 'InfoOfTrading' call from dll 'Solaris.dll' critical error


Статью я читал.


В настройках проекта явно указал способ вызова:


А в MT5 по прежнему работает без ошибок.

 
tol64:
Вообще в справке сигналы описываются именно так, как Вам нужно. Вот здесь можно увидеть. А на рисунке у Вас видны настройки ещё от индикатора CCI. То есть скорее всего у Вас собран эксперт не только по сигналам индикатора Envelopes. Есть ещё CCI. 

Ну да, извините. Не ту картинку выложил. Но это не меняет дело. Вот картинка от советника только на envelopes.

 

Что мне делать? как это исправить?  

 

К стати, в примере сурса из стандартной поставки МТ4 вызов через __stdcall:

MT4_EXPFUNC double __stdcall GetDoubleValue(const double dpar)
  {
   printf("GetDoubleValue takes %.8lf\n",dpar);
   return(dpar);
  }

и работает нормально.

 
Ну объясните же мне кто нибудь!!!
 
joo:

К стати, в примере сурса из стандартной поставки МТ4 вызов через __stdcall:

и работает нормально.


В МТ4 примере:

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall оказывается поддерживается. Не уверен, что правильно описывать передачу параметров через & для четверки.
Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Renat:

В МТ4 примере:

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall оказывается поддерживается. Не уверен, что правильно описывать передачу параметров через & для четверки.

Напрочь я разучился за 2 года работать с 4-кой. :)

1. Оказывается, в переменную, переданную по ссылке, нельзя писать в dll. Для этого нужно использовать массив.

2. И в обязательном порядке нужно использовать *.def файл.

Вот, собственно, 2 отличия работы с dll 4-ки и 5-ки, которые я обнаружил, возможно есть ещё.

 
Народ, извините если подобный вопрос уже поднадоел, не подскажите, как правильно заполнить вкладку параметры>почта? У меня почта на маил.ру, подойдет? Не знаю, какой там адрес у сервера.. если не подойдет, где зарегистрировать подходящую? Хочу вот оформить уведомления по емаил..