OOP, plantillas y macros en mql5, sutilezas y usos - página 24

 
Vict:

Así que funcionará, supongo:

no funciona así

#importar espera un nombre de archivo

Victoreo:

No lo entiendo, ¿para qué arden las velas?

No quiero hacer el gestor de conexiones en la dll, y en MT4 por alguna razón, si llamo 2 veces a la dll desde 2 EAs entonces la nueva copia de la dll no se crea en la memoria (la dll tiene objetos estáticos, envoltura sobre .Net - si ejecuto una dll entonces se bloquea, 2 archivos diferentes sin problemas),

así que quería rápidamente - sólo copiar el archivo mylib.dll a mylib02.dll y todo funciona sin problemas.... pero quiere declarar globalmente una macro sustitución

 
Igor Makanu:
no funciona así

Y esto parece ser un error/fallo. Presta atención al PS en el último post

PD: si todavía te apetece mucho, prueba con name_dll (sin el punto), tal vez despegue.

 
Vict:

Y esto parece ser un error/fallo. Preste atención a la PS en el puesto anterior

Este no es el caso de MT4

MT4 verá la propia dll sólo en tiempo de ejecución, y lo que estoy discutiendo con usted - no es permitido por el propio compilador, es decir, así es como el compilador pasará

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

y si lo escribes así:

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

es decir, hay una directiva de sintaxis rígida #import + alguna cadena entre comillas - y todo está en una línea

pero no sé por qué no puedo sustituir #import "mylib.dll" por mi combinación a través de la sustitución de macros

Victora:

PD: si todavía te apetece mucho, prueba a darle a name_dll (sin punto), a lo mejor se anima.

No entiendo por qué ni siquiera puedo construir inludes con compilación condicional? - todo funciona de forma muy primitiva en MQL .... aunque espero no entenderlo
 
Igor Makanu:

Este no es el caso de MT4

MT4 verá la dll en sí misma sólo en tiempo de ejecución, y lo que estoy discutiendo con usted - el compilador no lo dejará pasar, es decir, así es como el compilador pasará

y si lo escribes así:

es decir, hay una directiva de sintaxis rígida #import + alguna cadena entre comillas - y todo está en una línea

Pero quién sabe por qué no puedo sustituir con la macro #import "mylib.dll" mi combinación

No entiendo por qué ni siquiera puedo construir inludes con compilación condicional? - todo funciona de forma muy primitiva en MQL .... aunque espero no entenderlo

No sé por qué no te funciona, a mí me funciona.

#define  DD "jkjk.dll"
#import  DD
void fn();
#import
Ahora sólo hay que establecer diferentes DD en diferentes EAs ("lib_1.dll", "lib_2.dll").
 
Vict:

No sé por qué no te funciona, a mí me funciona

Ahora sólo hay que establecer diferentes DD en diferentes EAs ("lib_1.dll", "lib_2.dll").

Lo siento, se me olvidó - mis fuentes se pasan por el preprocesador slang, en µl - sí, no funciona.

 
Vict:

Lo siento, se me olvidó - mis fuentes se pasan por el preprocesador slang, en µl - sí, no funciona.

En general, he tomado MQL, por lo que funcionará como se pretende

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

Declaro 2 macro sustituciones en el código principal

#define  USE_DLL_NUMBER

#define  USE_DLL_NUMBER02 

... lo reduciría a una macro USE_DLL_NUMBER02 - es en general algo similar a lo que me convendría - quiero poder escribir USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - en el futuro si surge la necesidad

 
Igor Makanu:

... reducirlo a una sola macro USE_DLL_NUMBER02 - es en general algo parecido a lo que me convendría - quiero poder escribir USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - en el futuro si se quiere

en general, con la ayuda de la fuerza bruta, fue posible 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 qué mql4 no implementa una macro #if que funcione por valor, se podrían crear objetos selectivos 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 el programa posterior puede ser corregido con el tipo correcto
 
Nunca he visto que esta expresión devuelva falso.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Por eso es difícil llevar estadísticas sobre el tiempo de ejecución de las órdenes basadas en el historial de operaciones.

Si todavía podemos igualar el valor deORDER_TIME_SETUP_MSC para las órdenes de mercado, no tiene sentido para las órdenes.

 
Lo más probable es que sea uno obsoleto. El modificador const no garantiza que el objeto no sea 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);
}


Algunos compiladores probablemente emitan advertencias en estas situaciones.

Razón de la queja: