Experts: Suivi des offres (exemple de cartographie) - page 2

 
sergeev:

1) Seul le serveur a le droit de modifier la mémoire. Les clients la lisent.

2) - Regardez Pipe. Là, les "événements" d'arrivée des données sont mis en œuvre de manière explicite - vous avez des données, nous les prenons, nous les attendons.

3) Oui, vous devrez écrire un serveur ou le copier à partir de MSDN, mais les clients prêts à l'emploi peuvent être utilisés directement dans MQL5.

4) malheureusement, vous ne pouvez pas résoudre ce problème avec la périodicité du polling. Sleep(1) ne devrait pas faire de bruit même en travaillant avec la mémoire. Vous devriez vérifier le timing des fonctions, peut-être qu'il y a des passes et des chargements supplémentaires quelque part.

1 - seulement un serveur (écrit par moi à partir de vos développements)

2 - intéressant, je vais regarder seulement j'ai une tâche "aussi opportune que possible" pour transférer des données de 4(8) octets, c'est-à-dire le cycle entier (doit être exécuté très souvent).

3 - Je pense que par analogie avec l'article je vais faire le mien, mais jusqu'à présent le problème même l'exemple de test ne fonctionne pas.

4 - oui, j'ai réécrit certaines choses, j'ai optimisé le code, il semble être meilleur.

 

J'ai essayé d'ajouter votre dll à mt4.

2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: -unknow err(0)  h=0
2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: function 'MemOpen' call from dll 'MemMap32.dll' critical error c0000005 at 666013E6.
Voici le code
#include <stdlib.mqh>

#define modeOpen                                                        0 // ouvrir le drapeau
#define modeCreate                                                      1 // drapeau de création

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // ouvrir/créer un fichier en mémoire, obtenir un handle
void MemClose(int hmem); // fermer le fichier en mémoire
int MemGrows(int hmem,string path,int newsize,int &err); // augmenter la taille du fichier en mémoire
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // écrire le vecteur int(4) v dans la mémoire à partir de la position spécifiée pos, taille sz
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // lecture du vecteur v à partir de la position spécifiée pos avec la taille sz

#import


int hmem,err; // 
string file; // nom du fichier en mémoire


int init()
   {
   file="Local\\123"; // nom du fichier en mémoire

   hmem=MemOpen(file,-1,modeOpen,err); // ouvrir un fichier existant
   if(hmem>0) // si ouvert
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // s'il n'est pas ouvert,
     {
      Print("-err("+err+") memfile not found.");

     }
   else
     {
      Print("-unknow err("+err+")  h="+hmem);
      return(0);
     }
   Print("OK ("+err+") h="+hmem);   
 
      return(0);
   }
 

tourner le tournevis vers la droite

 
sergeev:

tourner le tournevis correctement

Votre exemple dans le lien utilise MemMap.dll

Il n'est pas là, c'est MEmMap32.dll.

Cela fonctionne dans mt5, mais dans mt4 il ne trouve pas le fichier.

Initialement, l'erreur de déclaration aurait dû être un tableau, merci pour cela.

 
Pouvez-vous me dire comment contourner ce problème ?
OK      1       01:10:31        tradeBuySell    'D:\MT5******\MQL5\Libraries\MemMap32.dll' is not 64-bit version
JF      1       01:10:37        tradeBuySell (GBPUSD,H1)        Cannot load 'D:\******\MQL5\Libraries\MemMap32.dll'

La version x64 de terminal mt5 est automatiquement installée sur le serveur.

J'ai Win7x64 sur mon ordinateur portable, mais j'ai une version 32 bits normale de terminal et il n'essaie pas de se mettre à jour en x64.