OOP, templates et macros dans mql5, subtilités et utilisations - page 23

 
Igor Makanu:

pour que je puisse faire ce que je veux.


intéressé par les options suggérées hier par la formule magique #defaine abracadabra ##_

UPD :

Vladimir Simakov OK, je vais essayer de trouver une solution.

Igor Makanu:

alors fais ce que je veux


intéressé par les variations proposées hier en utilisant la formule magique #defaine abracadabra ##_

UPD :

Vladimir Simakov OK, je vais essayer de trouver une solution.

UPD :

HOORAY ! ÇA A MARCHÉ ! (С)


Merci ! Ça a marché comme prévu !


PZY : Comment ajouter les macros __MQL5__ et __MQL4__ à cet abracadabra, mais les fonctions fast_xxx() ne seront jamais dans le code MQL4 du tout - du mot JAMAIS

UPD :

HOORAY ! ÇA A MARCHÉ ! (С)


Merci ! Ça a marché comme prévu !


PZY : Comment ajouter les macros __MQL5__ et __MQL4__ à cet abracadabra mais les fonctions fast_xxx() ne seront jamais dans le code MQL4 du tout - du mot JAMAIS

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

comment savoir quel terminal (MT4/MT5) exécute le code ?

une variable vrai/faux est suffisante

 
Igor Makanu:

comment savoir quel terminal (MT4/MT5) exécute le code ?

une variable vrai/faux est suffisante

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

OK, mais je veux regarder dans les macros, ça doit être quelque chose de simple.

UPD :

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

bool isMQL5 = mql5;
 
Igor Makanu:

OK, mais je veux regarder dans les macros, ça doit être quelque chose de simple.

UPD :

Quel est le sens sacré ?

 
Artyom Trishkin:

Quel est le sens sacré ?

vérifiez le compilateur, s'il s'agit du "bon compilateur", il devrait éliminer tout ce qui est inutile à l'étape de la compilation.

#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");
  }
//+------------------------------------------------------------------+

compilez-le et regardez la taille du .ex5 ;)

SZY : dans if() on peut mettreisMQL5 ,mql5 , on peut enlever le modificateur const - en général, c'est un compilateur correct.

 

il existe un tel code :

#import "mydll.dll"
#import

mt4 ne crée pas de nouvelles copies de dll en mémoire si vous appelez depuis 2 EA, je ne veux pas modifier la dll elle-même (elle est 100 % satisfaisante), il est plus facile de copier 5 fois le fichier mydll.dll

J'ai besoin d'une macro pour obtenir ce qui suit

#define  dllnum 02

#import "mydll02.dll"
#import

Mais je veux vérifier que s'il n'y a pas de macro,dllnum alors ce sera "mydll.dll".



UPD :

ceci est résolu

#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 : non résolu (((.

'mydll02.dll' - les expressions ne sont pas autorisées dans un contexte global

 
Igor Makanu:

il existe un tel code :

mt4 ne crée pas de nouvelles copies de la dll en mémoire si elle est appelée depuis 2 EA, je ne veux pas modifier la dll elle-même (elle est 100 % satisfaisante), il est plus facile de copier le fichier mydll.dll 5 fois

J'ai besoin d'une macro pour obtenir ce qui suit

Mais je veux vérifier que s'il n'y a pas de macro,dllnum alors ce sera "mydll.dll".



UPD :

ceci est résolu


UPD2 : non résolu (((.

mydll02.dll' - les expressions ne sont pas autorisées dans une portée globale

Ça ne marchera pas, je suppose.

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

Il ne reçoit pas de jeton valide ici. En général, mcl devrait être capable de

#import "jkjfkj"".dll"

mais hélas, comme on dit, ce n'est pas du C++).

 
Vict:

Ça ne marchera pas, je suppose.

il ne reçoit pas de jeton valide ici. En fait, la mcl devrait être capable de

mais hélas, comme on dit - ce n'est pas C++))

mm-hmm

au moins j'ai essayé de macroinclure les tokens.... ça a encore foiré

#define  FNAME <mylib.mqh>

#include  FNAME

#include' - des guillemets doubles ou des crochets < sont nécessaires

#include' - les expressions ne sont pas autorisées dans une portée globale


 
Igor Makanu:

Je ne comprends pas - pourquoi les bougies brûlent-elles ? C'est comme ça que ça marche, je suppose :

#define  LIB "kjkjkjk.dll"
#import  LIB

J'admets que cela peut être utile lorsqu'il s'agit de corriger une configuration.

PS : si vous y tenez vraiment, essayez name_dll (sans le point), peut-être que ça décollera.
Raison: