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

 
Vict:

Então vai funcionar, acho eu:

não funciona dessa maneira

#importar é esperar um nome de arquivo

Vitória:

Simplesmente não entenda - para que as velas estão queimando?

Eu não quero fazer gerenciamento de conexão na dll, e no MT4 por alguma razão, se eu chamar 2 vezes dll de 2 EAs então uma nova cópia dll não é criada na memória (dll tem objetos estáticos, wrapper sobre .Net - se eu executar uma dll então ela trava, 2 arquivos diferentes sem problemas),

então eu queria rapidamente - basta copiar o arquivo mylib.dll para mylib02.dll e tudo funciona sem problemas.... mas querem declarar globalmente uma substituição macro

 
Igor Makanu:
não funciona assim

E isto parece um bug/failure. Preste atenção ao PS no último posto

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

 
Vict:

E isto parece um bug/failure. Preste atenção ao PS no post anterior

Este não é o caso do MT4

MT4 verá a dll em si somente em tempo de execução, e o que estou discutindo com vocês - não é permitido pelo próprio compilador, ou seja, é assim que o compilador passará

#import "mylib.dll"
#import
#import "mylib"
#import

e se você escrever dessa forma:

#import 
"mylib.dll"   //'mylib.dll' - expressions are not allowed on a global scope
#import

ou seja, há uma rígida diretiva de sintaxe #importância + algum fio entre aspas - e está tudo em uma linha

mas não sei por que não posso substituir #importar "mylib.dll" por minha combinação através da substituição de macros

Vitória:

PS: se você ainda quiser realmente, tente dar nome_dll (sem um ponto), talvez ele decole.

Não entendo porque não posso nem mesmo construir lúcios com compilação condicional? - tudo funciona de forma muito primitiva na MQL .... embora eu espero não entender
 
Igor Makanu:

Este não é o caso do MT4

MT4 verá a dll em si somente em tempo de execução, e o que estou discutindo com você - o compilador não deixará passar, ou seja, é assim que o compilador passará

e se você escrever dessa forma:

ou seja, há uma rígida diretiva de sintaxe #importância + algum fio entre aspas - e está tudo em uma linha

Mas quem sabe por que não posso substituir a macro #importar "mylib.dll" pela minha combinação

Não entendo porque não posso nem mesmo construir lúcios com compilação condicional? - tudo funciona de forma muito primitiva na MQL .... embora eu espero não entender

Eu não sei por que não funciona para você, funciona para mim.

#define  DD "jkjk.dll"
#import  DD
void fn();
#import
Agora basta definir DD diferentes em EAs diferentes ("lib_1.dll", "lib_2.dll").
 
Vict:

Não sei por que não está funcionando para você, está funcionando para mim

Agora basta definir DD diferentes em EAs diferentes ("lib_1.dll", "lib_2.dll").

Desculpe, esqueci - minhas fontes passam pelo pré-processador de gírias, em µl - sim, não funciona.

 
Vict:

Desculpe, esqueci - minhas fontes são passadas pelo pré-processador de gírias, em µl - sim, não funciona.

Em geral, eu tomei MQL, por isso funcionará como pretendido

#ifdef  USE_DLL_NUMBER
   #ifdef  USE_DLL_NUMBER02 
      #import "mylib2.dll"
   #endif 
#else 
#import "mylib.dll"   
#endif

Declaro 2 substituições macro no código principal

#define  USE_DLL_NUMBER

#define  USE_DLL_NUMBER02 

... seria reduzir a uma macro USE_DLL_NUMBER02 - é em geral algo semelhante ao que me convém - quero poder escrever USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - no futuro, se surgir a necessidade

 
Igor Makanu:

... reduzi-lo a uma única macro USE_DLL_NUMBER02 - é em geral algo semelhante ao que me convém - quero ser capaz de escrever USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - no futuro, se o desejo

em geral, com a ajuda da força bruta, foi possível resolver este problema

#ifdef  USE_DLL_NUMBER01 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER02  
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER03 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER04 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER05 
#define  USE_DLL_NUMBER 
#endif
 

Por que o mql4 não implementa uma macro # se funcionar por valor, você poderia criar objetos seletivos como

#define  Znah 0
#define  PrmI int    Peremen=6;
#define  PrmD double Peremen=3.345;

#if  Znah//если больше 0 то появится переменная int Peremen
   PrmI
#else
    PrmD//иначе появится переменная double Peremen
#endif
Como resultado, todo o programa subseqüente pode ser corrigido com o tipo certo
 
Eu nunca encontrei uma expressão que retornasse falsa.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

É por isso que é difícil manter estatísticas sobre o tempo de execução das ordens com base no histórico comercial.

Se ainda podemos corresponder ao valor doORDER_TIME_SETUP_MSC para ordens de mercado, não faz sentido para as ordens.

 
É muito provavelmente um obsoleto. O modificador constante não garante que o objeto não será modificado.
struct A
{
  int i;

  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}


Alguns compiladores provavelmente emitem avisos nestas situações.

Razão: