Mon approche. Le noyau est le moteur. - page 94

 
Vitaly Muzichenko:

Magnifique monologue)

Hamlet se repose.)

 
Реter Konow:

Alors, qu'est-ce qui ne va pas ?

l'erreur -

ERR_RESOURCE_NOT_FOUND

https://www.mql5.com/ru/docs/runtime/resources

Lire l'aide .

Citation :

 Напомним, что для использования ресурса из mql5-программы его необходимо 
указывать в виде: <путь_имя_файла_EX5>::<имя_ресурса>.
 
Nikolai Semko:

https://www.mql5.com/ru/docs/runtime/resources

Lire la référence .

Citation :

Oui. J'ai compris. Je l'ai mal branché.

 
Реter Konow:
Voilà ce que je pensais. Il est possible d'utiliser les ressources d'autres programmes. Je suppose que la solution est là. Je vais devoir regarder dans la documentation.

La ressource n'a pas été connectée correctement.

Vous devez spécifier le chemin d'accès au programme dont nous voulons lire la ressource.

Dans l'Inite du programme de lecture, vous devez établir la connexion au fichier de ressources dans un autre programme :

if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\Tester EA.ex4::Resource"))Print("Resource is not connected!");

Et lorsque vous lisez la ressource, spécifiez également le chemin d'accès complet :

if(!ResourceReadImage("\\Experts\\Tester EA.ex4::Resource",Data,width,height))Print("Failed to read resource!  ",GetLastError());

//--------------------------------------------

Mais, il y a un nouveau non-sens :

Lors de la lecture de la ressource, des mouchetures apparaissent dans la ligne. Voici le code :

void OnTimer()
  {
//---
   uchar Arr[];
   uint Data[],width,height;
   //-----------------------------
   if(!ResourceReadImage("\\Experts\\Tester EA.ex4::Resource",Data,width,height))Print("Failed to read resource!  ",GetLastError());
   //-----------------------------
   ArrayCopy(Arr,Data);
   //-----------------------------
   string Message = CharArrayToString(Arr);
   //-----------------------------
   Print(Message);
  }

Et ce qui est étrange, c'est que si nous supprimons le conseiller expert avec la ressource du graphique, le programme de lecture continuera à recevoir la ressource. Cette ressource aura le même texte rouge et les mêmes déchets. Les ordures sont toujours différentes.

Et comment y faire face ?

ZS. Je vais essayer de spécifier d'autres encodages de pages dansCharArrayToString().

 

Il est intéressant de noter que la taille de la ligne de caractères cursifs est la même que celle du tableau contenant le message.

Mais, dans le flot des franges, il y a parfois des éclairs de valeurs Bid presque exactes qui sont inscrites sur la deuxième face. Elles clignotent une fois, et il y a aussi une ou deux franges à l'intérieur. Mais ils sont lisibles. Et puis, à nouveau, un flot de mouchetures.

Il s'avère que du côté de l'expéditeur de l'événement de remplissage des ressources, tout est fait correctement. Ensuite, le côté lecture accepte la ressource, qui a été corrompue en interne et mise à sac. Plus la partie lectrice lit rapidement le message dans la ressource, plus le message sera intact.

Vous avez donc besoin d'une synchronisation précise en lecture/écriture ?


ZS. Cher fxsaber, pouvez-vous clarifier ce qui ne va pas ici ?

Je joins les fichiers :

Dossiers :
 
Реter Konow:

ZS. Cher fxsaber, pouvez-vous expliquer ce qui ne va pas ici ?

Beaucoup de gens ici voient immédiatement vos erreurs, mais préfèrent se taire car c'est plein de dangers. Et je les comprends très bien. Je dirais à l'avance que je ne répondrai pas par la suite. Apprenez à chercher vos propres erreurs et à construire correctement l'attitude des autres.


Au code.

Vous copiez uint en uchar par ArrayCopy - une erreur.

CharArrayToString - cela fonctionnera si les chaînes de caractères sont ANSI.


Régler les particularités de la représentation des types par octet.

 
fxsaber:

Beaucoup de gens ici voient tout de suite vos erreurs, mais préfèrent se taire car c'est plein de dangers. Et je les comprends très bien. Je ne répondrai pas après. Apprenez à chercher vos propres erreurs et à construire correctement l'attitude des autres.


Au code.

Vous copiez uint en uchar par ArrayCopy - une erreur.

CharArrayToString - cela fonctionnera si les chaînes de caractères sont ANSI.


Essayez de comprendre les particularités de la représentation des types par octet.

Lorsque les gens qui m'entourent respectent mes solutions, je respecte les leurs. Eh bien, vous ne pouvez pas l'avoir d'une autre manière. Le respect mutuel.

Par le code. Merci. Je vais voir ce que je peux faire.

 

Merde, j'en ai marre. Ça m'a pris une demi-journée pour le découvrir.

J'ai déjà trouvé les syndicats. Mais cette solution est une béquille dans un cube. Vous avez toujours besoin d'opérations sur les octets. Mais pour mes tâches, cela n'est absolument pas pertinent.

Il est beaucoup plus facile de travailler avec des descriptions d'objets. Il est garanti et simple. Mais je ne sais pas si les ressources fonctionneront avec le testeur. Ça n'en vaut pas la peine.

Voici une solution via les syndicats :

//+------------------------------------------------------------------+
//|                                                    Tester EA.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
union Char_Uint
  {
   uchar   Char[8];
   uint    Uint[2];  
   double  Double; 
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //----------------------------------------------
   if(!ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0))Print("Object is not created!  ",GetLastError());
   else Print("Object created!");
   //-------------------------------
   if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"))Print("BMPFILE is not created!");
   else Print("BMPFILE created!");
   //----------------------------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //---------------------------
   Char_Uint u;
   //---------------------------
   u.Double = Bid;
   //---------------------------
   if(!ResourceCreate("::Resource",u.Uint,2,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA))Print("Resource is not created!");
   //---------------------------   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+

Et un indicateur de lecture :

//+------------------------------------------------------------------+
//|                                              Resource reader.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
union Char_Uint
  {
   uchar Char[8]; 
   uint  Uint[2]; 
  };
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(5250); 
   
   if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\Tester EA.ex4::Resource"))Print("Resource is not connected!");
   else Print("Resource connected!");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   Char_Uint u;
   uint width,height;
   string Message; 
   //-----------------------------
   if(!ResourceReadImage("\\Experts\\Tester EA.ex4::Resource",u.Uint,width,height))Print("Failed to read resource!  ",GetLastError());
   //-----------------------------
   Message = CharArrayToString(u.Char);
   //-----------------------------
   Print(Message);
   //-----------------------------
  }
//+------------------------------------------------------------------+
 

Je continue à avoir des crocodiles. C'est toujours différent. Il y a donc toutes sortes de déchets dans la ressource. Si son contenu était le même, alors il ne changerait pas trop.

En général, la façon dont tout cela devrait fonctionner n'est pas claire...

Je trouverai peut-être une solution plus tard.....

 

Les syndicats sont certainement une chose intéressante. Cependant, je ne vois pas à quelles fins (autres que la conservation d'une ressource) il pourrait être utile.

Raison: