ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 23

 
Igor Makanu:

так получатся сделать что хочу


интересуют варианты предложенные вчера с помощью магического заклинания #defaine абракадабра  ##_ 

UPD:

Vladimir Simakov OK, попробую разобраться

Igor Makanu:

так получатся сделать что хочу


интересуют варианты предложенные вчера с помощью магического заклинания #defaine абракадабра  ##_ 

UPD:

Vladimir Simakov OK, попробую разобраться

UPD:

УРА! ЗАРАБОТАЛО! (С)


Спасибо! все взлетело как задумано!


ЗЫ: а как бы в эту абракадабру добавить макросы __MQL5__ и __MQL4__  но так чтобы функции fast_ххх()  вообще не были в коде MQL4 никогда - от слова НИКОГДА

UPD:

УРА! ЗАРАБОТАЛО! (С)


Спасибо! все взлетело как задумано!


ЗЫ: а как бы в эту абракадабру добавить макросы __MQL5__ и __MQL4__  но так чтобы функции fast_ххх()  вообще не были в коде MQL4 никогда - от слова НИКОГДА

#ifdef __MQL5__
   #ifdef USE_FAST
      #define CONNECT fast_connect
   #else
      #define CONNECT connect
   #endif
#else
   #define CONNECT connect
#endif
 

как рантайм узнать какой терминал(МТ4/МТ5) выполняет код?

достаточно одной переменной true/false 

 
Igor Makanu:

как рантайм узнать какой терминал(МТ4/МТ5) выполняет код?

достаточно одной переменной true/false 

bool is_mt5=(TerminalInfoString(TERMINAL_NAME)=="MetaTrader 5");
 
Artyom Trishkin:

ОК, но в макросах хочу, посмотреть, там, скорее всего, что то простое (примитивное будет)

UPD:

#ifdef __MQL5__
  #define mql5 true
#else
  #define mql5 false 
#endif

bool isMQL5 = mql5;
 
Igor Makanu:

ОК, но в макросах хочу, посмотреть, там, скорее всего, что то простое (примитивное будет)

UPD:

В чём сакральный смысл?

 
Artyom Trishkin:

В чём сакральный смысл?

проверка компилятора, если это "правильный компилятор", то на этапе компиляции он должен выбросить все лишнее

#ifdef __MQL5__
  #define mql5 true
#else
  #define mql5 false 
#endif

const bool isMQL5 = mql5;

const string txt_1000symbols = "Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания"
                               "автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные"
                               "экспертные системы, предназначенные для работы в режиме реального времени, но и создавать собственные графические инструменты, помогающие принимать торговые решения."
                               "MQL5 основан на концепции широко распространенного языка программирования С++, по сравнению с MQL4 в нем добавлены перечисления, структуры, классы и обработка событий."
                               " Благодаря расширению числа встроенных основных типов, взаимодействие исполняемых программ на MQL5 с другими приложениями "
                               "посредством dll максимально облегчено. Синтаксис языка MQL5 подобен синтаксису С++, и это позволяет легко переносить на него программы из современных языков "
                               "программирования. Для целей изучения языка все темы сгруппированы по следующим разделам.\n";
//+------------------------------------------------------------------+
void OnStart()
  {
   if(isMQL5) Print(txt_1000symbols);
   Print("end");
  }
//+------------------------------------------------------------------+

откомпилируй и размер .ex5 понаблюдай ;)

ЗЫ:  в if() можно поставлять isMQL5 ,  mql5 , можно модификатор const убрать - в общем правильный компилятор 

 

есть такой код:

#import "mydll.dll"
#import

мт4 почему то не создает новые копии dll в памяти если вызывать из 2-х ЕА , саму dll не хочу править (устраивает на все 100) , проще скопировать файл  mydll.dll  5 раз

нужно сделать макропостановку чтобы получилось так

#define dllnum 02

#import "mydll02.dll"
#import

но хочу с проверкой, если нет макроса, dllnum то будет так   "mydll.dll"



UPD:

так решил

#define dllnum 2

#define DEF_QUOTES(arg) #arg

#ifdef dllnum
   #define DEF_DLL_NAME(a,b) DEF_QUOTES(a##0##b.dll)
#else
   #define DEF_DLL_NAME(a,b) DEF_QUOTES(a.dll)
#endif 

   
string s =  DEF_DLL_NAME(mydll,dllnum);


UPD2: не решил (((

'mydll02.dll' - expressions are not allowed on a global scope

 
Igor Makanu:

есть такой код:

мт4 почему то не создает новые копии dll в памяти если вызывать из 2-х ЕА , саму dll не хочу править (устраивает на все 100) , проще скопировать файл  mydll.dll  5 раз

нужно сделать макропостановку чтобы получилось так

но хочу с проверкой, если нет макроса, dllnum то будет так   "mydll.dll"



UPD:

так решил


UPD2: не решил (((

'mydll02.dll' - expressions are not allowed on a global scope

Не получится ничего, наверное.

DEF_QUOTES(a##0##b.dll)

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

#import "jkjfkj"".dll"

но увы, как говорится - вам здесь не с++ ))

 
Vict:

Не получится ничего, наверное.

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

но увы, как говорится - вам здесь не с++ ))

угу

пробовал хотя бы инклудники через макроподстановку подключать.... что то опять не так пошло

#define FNAME <mylib.mqh>

#include FNAME

'#include' - double quotes or angle bracket < are needed

'#include' - expressions are not allowed on a global scope


 
Igor Makanu:

Только не понял - ради чего свечи жгутся? Так заработет, наверное:

#define LIB "kjkjkjk.dll"
#import LIB

Допускаю, что полезно может быть, когда какой-то конфиг, который правится.

PS: если всё же очень хочется, то попробуйте имя либе дать name_dll (без точки), возможно взлетит.