OOP, modelli e macro in mql5, sottigliezze e usi - pagina 23

 
Igor Makanu:

così posso fare quello che voglio.


interessato alle opzioni suggerite ieri usando l'incantesimo #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, cercherò di capirlo

Igor Makanu:

quindi fai quello che voglio


interessato alle variazioni suggerite ieri usando l'incantesimo #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, cercherò di capirlo

UPD:

URRÀ! HA FUNZIONATO! (С)


Grazie, è decollato come previsto!


PZY: Come potrei aggiungere le macro __MQL5__ e __MQL4__ a questo abracadabra, ma le funzioni fast_xxx() non saranno mai nel codice MQL4 - dalla parola MAI

UPD:

URRÀ! HA FUNZIONATO! (С)


Grazie, è decollato come previsto!


PZY: Come potrei aggiungere le macro __MQL5__ e __MQL4__ a questo abracadabra ma le funzioni fast_xxx() non saranno mai nel codice MQL4 - dalla parola MAI

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

come faccio a sapere quale terminale (MT4/MT5) sta eseguendo il codice?

una variabile vero/falso è sufficiente

 
Igor Makanu:

come faccio a sapere quale terminale (MT4/MT5) sta eseguendo il codice?

una variabile vero/falso è sufficiente

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

OK, ma voglio guardare nelle macro, è probabile che sia qualcosa di semplice.

UPD:

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

bool isMQL5 = mql5;
 
Igor Makanu:

OK, ma voglio guardare nelle macro, è probabile che sia qualcosa di semplice.

UPD:

Qual è il significato sacro?

 
Artyom Trishkin:

Qual è il significato sacro?

controllare il compilatore, se è il "compilatore giusto", dovrebbe buttare via tutto ciò che non è necessario in fase di compilazione

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

compilalo e guarda la dimensione di .ex5 ;)

SZY: in if() puoi mettereisMQL5 ,mql5 , puoi rimuovere il modificatore const - in generale, è un compilatore corretto.

 

esiste un tale codice:

#import "mydll.dll"
#import

mt4 non crea nuove copie di dll in memoria se chiamato da 2 EA, non voglio modificare la dll stessa (è soddisfacente al 100%), è più facile copiare il file mydll.dll 5 volte

Ho bisogno di una macro per ottenere quanto segue

#define  dllnum 02

#import "mydll02.dll"
#import

Ma voglio controllare che se non c'è una macro,dllnum allora sarà "mydll.dll"



UPD:

questo risolto

#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 risolto ((((.

'mydll02.dll' - le espressioni non sono consentite in uno scopo globale

 
Igor Makanu:

esiste un tale codice:

mt4 non crea nuove copie di dll in memoria se chiamato da 2 EA, non voglio modificare la dll stessa (è soddisfacente al 100%), è più facile copiare il file mydll.dll 5 volte

Ho bisogno di una macro per ottenere quanto segue

Ma voglio controllare che se non c'è una macro,dllnum allora sarà "mydll.dll"



UPD:

questo risolto


UPD2: non risolto ((((.

'mydll02.dll' - le espressioni non sono consentite in uno scopo globale

Non funzionerà, credo.

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

Qui non si ottiene un token valido. In generale, mcl dovrebbe essere in grado di

#import "jkjfkj"".dll"

ma ahimè, come si dice, questo non è C++).

 
Vict:

Non funzionerà, credo.

non ottiene un token valido qui. In realtà, il mcl dovrebbe essere in grado di

ma ahimè, come si dice - questo non è C++))

mm-hmm

almeno ho provato a macroincludere i tokens.... è andato di nuovo male

#define  FNAME <mylib.mqh>

#include  FNAME

'#include' - sono necessari doppi apici o parentesi angolari <

#include' - le espressioni non sono permesse in uno scopo globale


 
Igor Makanu:

Proprio non capisco - per cosa bruciano le candele? È così che funziona, credo:

#define  LIB "kjkjkjk.dll"
#import  LIB

Ammetto che può essere utile quando c'è qualche configurazione che viene corretta.

PS: se vuoi ancora farlo, prova name_dll (senza punto), forse decollerà.