Erreurs, bugs, questions - page 1313

 

Comment puis-je éviter d'utiliser deux dll, une pour les terminaux 32 bits et une pour les terminaux 64 bits ? Ce n'est pas kasher de garder deux instances du programme...

Au fait, qui a de l'expérience, si vous compilez du code en ME x64, il fonctionnera sur des terminaux 32 bits sans erreurs ou il y aura des caractéristiques cachées de l'exécution du code ?

 

Par exemple, il existe une fonction funcTest(...) dans la bibliothèque pour terminaux 32 bits library_x86.dll et pour terminaux 64 bits library_x64.dll.

Si l'importation est visible dans tout le fichier, est-il correct d'écrire une telle construction :

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import  library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import  library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
ou cette astuce ne fonctionnera pas ?
 
Konstantin Karpov:
Ou cette astuce ne fonctionnera pas ?

Pour autant que je sache, non. Vous pouvez importer les deux dlls et appeler les fonctions de l'une ou l'autre en fonction du débit binaire du terminal.

En général, la division en deux versions par débit binaire n'est pas une option si délirante.

 

Je prends un indicateur (n'importe lequel de l'ensemble standard), je l'appelle dans l'Expert Advisor :

iCustom (NULL, 0, "Momentum", 0, 1);

Après avoir exécuté l'EA avec la visualisation dans le testeur - tout fonctionne, l'indicateur est dessiné.

Maintenant je change une ligne dans l'indicateur

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

à cette ligne :

ExtMomBuffer[i]=100;

Et maintenant l'indicateur ne dessine rien du tout - même une échelle verticale n'est pas marquée.

Où se trouve l'erreur ? MetaTrader 4 build 765.

 
Il faut deux valeurs différentes dans la fenêtre pour que l'échelle apparaisse ? EMNIP. Je ne sais pas si cela peut être considéré comme un bug.
 

OK, appelons cela un comportement non conventionnel :)

Merci beaucoup, mais j'ai encore une question. Oui, ça a marché comme ça :

ExtMomBuffer[i]=i%2;

Et c'est ainsi qu'il a cessé de fonctionner à nouveau :

ExtMomBuffer[0]=i%2;

Je l'ai fait fonctionner dans les anciennes versions de MT, qu'est-ce qui ne va pas avec les nouvelles ?

 

Donc, dans la deuxième option, il y a une valeur.

En fait, je pourrais me tromper.

 

Tu peux le faire comme ça, ça ne marche toujours pas :

ExtMomBuffer[0]=cnt++;

Le nœud du problème est que la tentative d'écrire dans la barre 0 de l'indicateur à chaque étape de l'EA ne donne rien.

 

Je crois que j'ai trouvé où creuser. Modifié

ArraySetAsSeries(ExtMomBuffer,false);

à vrai et quelque chose commence à se voir. Je vais aller me saouler.

 
Фьючерсные объемы для МТ:

Pour autant que je sache, non. Vous pouvez importer les deux dlls et appeler les fonctions de l'une ou l'autre en fonction du débit binaire du terminal.

En général, la division en deux versions en fonction du débit binaire n'est pas une option si délirante.

C'est-à-dire faire comme ça ?

#import  library_x64.dll
   void funcTest(...);
#import  library_x86.dll
   void funcTest(...);
#import

... код в листинге файла класса CClass

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      void library_x64::funcTest(...);
   } else {
      void library_x86::funcTest(...);
   }

   код метода...
}

Et il y a aussi une question : si le code est construit sous 64 bits ME, fonctionnera-t-il correctement sous un terminal 32 bits ou y a-t-il des règles et des limitations ?

Développeurs, ne passez pas à côté...