OOP, modelos e macros em mql5, sutilezas e usos - página 23

 
Igor Makanu:

para que eu possa fazer o que quero.


interessado em opções sugeridas ontem usando o feitiço mágico #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, vou tentar descobrir

Igor Makanu:

então faça o que eu quero


interessado nas variações sugeridas ontem usando o feitiço mágico #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, vou tentar descobrir

UPD:

HOORAY! FUNCIONOU! (С)


Obrigado! Decolou como previsto!


PZY: Como eu adicionaria __MQL5__ e __MQL4__ macros a este abracadabra, mas fast_xxx() funções nunca estarão em código MQL4 - a partir da palavra NUNCA

UPD:

HOORAY! FUNCIONOU! (С)


Obrigado! Decolou como planejado!


PZY: Como eu adicionaria __MQL5__ e __MQL4__ macros a este abracadabra mas fast_xxx() funções nunca estarão em código MQL4 - a partir da palavra NUNCA

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

como saber qual terminal (MT4/MT5) está executando o código?

uma variável verdadeiro/falso é suficiente

 
Igor Makanu:

como saber qual terminal (MT4/MT5) está executando o código?

uma variável verdadeiro/falso é suficiente

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

OK, mas quero olhar nas macros, é provável que seja algo simples.

UPD:

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

bool isMQL5 = mql5;
 
Igor Makanu:

OK, mas quero olhar nas macros, é provável que seja algo simples.

UPD:

Qual é o significado sagrado?

 
Artyom Trishkin:

Qual é o significado sagrado?

verificar o compilador, se for o "compilador certo", ele deve jogar fora tudo o que for desnecessário na fase de compilação

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

compilá-lo e observar o tamanho de .ex5 ;)

SZY: em if() você pode colocarisMQL5 ,mql5 , você pode remover o modificador const - em geral, ele é um compilador correto.

 

existe um código desse tipo:

#import "mydll.dll"
#import

mt4 não cria novas cópias da dll na memória se chamada de 2 EA, eu não quero editar a dll em si (é 100% satisfatória), é mais fácil copiar o arquivo mydll.dll 5 vezes

Preciso de macro para obter o seguinte

#define  dllnum 02

#import "mydll02.dll"
#import

Mas eu quero verificar que se não houver macro,dllnum então será "mydll.dll".



UPD:

isto resolvido

#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: não resolvido (((.

'mydll02.dll' - não são permitidas expressões em um escopo global

 
Igor Makanu:

existe um código desse tipo:

mt4 não cria novas cópias da dll na memória se chamada de 2 EA, eu não quero editar a dll em si (é 100% satisfatória), é mais fácil copiar o arquivo mydll.dll 5 vezes

Preciso de macro para obter o seguinte

Mas eu quero verificar que se não houver macro,dllnum então será "mydll.dll".



UPD:

isto resolvido


UPD2: não resolvido (((.

'mydll02.dll' - não são permitidas expressões em um escopo global

Não vai funcionar, acho eu.

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

Aqui não há um símbolo válido. Geralmente, a mcl deve ser capaz de

#import "jkjfkj"".dll"

mas, infelizmente, como dizem, isto não é C++).

 
Vict:

Não vai funcionar, acho eu.

não recebe uma ficha válida aqui. Na verdade, o mcl deve ser capaz de

mas, infelizmente, como se costuma dizer - isto não é C++))

mm-hmm

pelo menos tentei macroincluir as fichas.... deu errado novamente

#define  FNAME <mylib.mqh>

#include  FNAME

#incluir' - aspas duplas ou suporte angular < são necessárias

#incluir' - as expressões não são permitidas em um escopo global


 
Igor Makanu:

Simplesmente não entenda - para que as velas estão queimando? É assim que funciona, acho eu:

#define  LIB "kjkjkjk.dll"
#import  LIB

Admito que isso pode ser útil quando há alguma configuração que está sendo corrigida.

PS: se você ainda quiser realmente, tente name_dll (sem ponto), talvez ele decole.
Razão: