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

 
Vict:

Donc ça va marcher, je suppose :

ça ne marche pas comme ça

#import attend un nom de fichier

Vict :

Je ne comprends pas - pourquoi les bougies brûlent-elles ?

Je ne veux pas créer de gestionnaire de connexion dans la dll, et dans MT4, pour une raison quelconque, si j'appelle 2 fois la dll à partir de 2 EAs, la nouvelle copie de la dll n'est pas créée en mémoire (la dll a des objets statiques, une enveloppe sur .Net - si j'exécute une dll, elle se plante, 2 fichiers différents sans problèmes),

donc je voulais rapidement - il suffit de copier le fichier mylib.dll vers mylib02.dll et tout fonctionne sans problème..... mais vous voulez déclarer globalement une substitution de macro

 
Igor Makanu:
ça ne fonctionne pas comme ça

Et cela ressemble à un bug/une défaillance. Faites attention au PS dans le dernier message

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

 
Vict:

Et cela ressemble à un bug/une défaillance. Faites attention au PS dans le post précédent

Ce n'est pas le cas avec MT4

MT4 ne verra la dll elle-même qu'au moment de l'exécution, et ce dont je discute avec vous - ce n'est pas autorisé par le compilateur lui-même, c'est-à-dire que c'est ainsi que le compilateur va passer

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

et si vous l'écrivez de cette façon :

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

c'est-à-dire qu'il y a une directive syntaxique rigide #import + une certaine chaîne entre guillemets - et tout est sur une seule ligne

mais je ne sais pas pourquoi je ne peux pas remplacer #import "mylib.dll" par ma combinaison par le biais de la substitution de macro.

Vict :

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

Je ne comprends pas pourquoi je ne peux même pas construire des inludes avec la compilation conditionnelle ? - tout fonctionne de manière très primitive dans MQL .... même si j'espère que je ne le comprends pas.
 
Igor Makanu:

Ce n'est pas le cas avec MT4

MT4 ne verra la dll elle-même qu'à l'exécution, et ce dont je discute avec vous - le compilateur ne la laissera pas passer, c'est-à-dire que voici comment le compilateur va passer

et si vous l'écrivez de cette façon :

c'est-à-dire qu'il y a une directive syntaxique rigide #import + une chaîne de caractères entre guillemets - et tout cela sur une seule ligne.

Mais qui sait pourquoi je ne peux pas substituer la macro #import "mylib.dll" à ma combinaison...

Je ne comprends pas pourquoi je ne peux même pas construire des inludes avec la compilation conditionnelle ? - tout fonctionne de manière très primitive dans MQL .... même si j'espère que je ne le comprends pas.

Je ne sais pas pourquoi ça ne marche pas pour toi, ça marche pour moi.

#define  DD "jkjk.dll"
#import  DD
void fn();
#import
Il suffit maintenant de définir des DD différents dans des EA différents ("lib_1.dll", "lib_2.dll").
 
Vict:

Je ne sais pas pourquoi ça ne marche pas pour toi, ça marche pour moi.

Il suffit maintenant de définir des DD différents dans des EA différents ("lib_1.dll", "lib_2.dll").

Désolé, j'ai oublié - mes sources sont passées par le préprocesseur slang, en µl - oui, cela ne fonctionne pas.

 
Vict:

Désolé, j'ai oublié - mes sources sont passées par le préprocesseur slang, en µl - oui, ça ne marche pas.

En général, j'ai pris le MQL, donc il fonctionnera comme prévu.

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

Je déclare 2 substitutions de macro dans le code principal

#define  USE_DLL_NUMBER

#define  USE_DLL_NUMBER02 

... réduirait à une macro USE_DLL_NUMBER02 - est en général quelque chose de similaire à ce qui me conviendrait - je veux pouvoir écrire USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - dans le futur si le besoin s'en fait sentir

 
Igor Makanu:

... le réduire à une seule macro USE_DLL_NUMBER02 - est en général quelque chose de similaire à ce qui me conviendrait - je veux pouvoir écrire USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - dans le futur si le besoin s'en fait sentir.

en général, avec l'aide de la force brute, il a été possible de résoudre ce problème

#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
 

Pourquoi mql4 n'implémente-t-il pas une macro #if qui fonctionne par valeur, vous pourriez créer des objets sélectifs tels que

#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
Par conséquent, l'ensemble du programme ultérieur peut être corrigé avec le type approprié
 
Je n'ai jamais rencontré une expression qui renvoie un résultat faux.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

C'est pourquoi il est difficile de tenir des statistiques sur le temps d'exécution des ordres sur la base de l'historique des transactions.

Si nous pouvons toujours faire correspondre la valeur deORDER_TIME_SETUP_MSC pour les ordres au marché, elle n'a aucun sens pour les ordres.

 
C'est très probablement un modèle obsolète. Le modificateur const ne garantit pas que l'objet ne sera pas modifié.
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);
}


Certains compilateurs émettent probablement des avertissements dans ces situations.