Mein Ansatz. Der Kern ist der Motor. - Seite 94

 
Vitaly Muzichenko:

Schöner Monolog)

Hamlet ruht.)

 
Реter Konow:

Also, was ist los?

der Fehler -

ERR_RESOURCE_NOT_FOUND

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

Lesen Sie die Hilfe.

Zitat:

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

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

Lesen Sie die Referenz .

Zitat:

Ja. Ich habe es herausgefunden. Ich habe ihn falsch eingesteckt.

 
Реter Konow:
Ich habe mir Folgendes überlegt. Es gibt eine Möglichkeit, Ressourcen aus anderen Programmen zu nutzen. Ich denke, die Lösung ist da. Ich werde in der Dokumentation nachsehen müssen.

Die Ressource wurde nicht korrekt angeschlossen.

Sie müssen den Pfad zu dem Programm angeben, dessen Ressource wir lesen wollen.

In der Inite des Leseprogramms müssen Sie die Verbindung zur Ressourcendatei in einem anderen Programm herstellen:

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

Geben Sie beim Lesen der Ressource auch den vollständigen Pfad an:

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

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

Aber es gibt einen neuen Unfug:

Beim Lesen der Ressource erscheinen Flecken in der Zeile. Hier ist der 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);
  }

Und das Seltsame ist, dass, wenn wir den Expert Advisor mit der Ressource aus dem Diagramm entfernen, das Leseprogramm weiterhin die Ressource erhält. Diese Ressource wird denselben roten Text und denselben Müll aufweisen. Der Müll ist immer anders.

Und wie sollten Sie damit umgehen?

ZS. Ich werde versuchen, verschiedene Seitenkodierungen inCharArrayToString() anzugeben.

 

Interessanterweise ist die Größe der Zeile mit den kursiven Zeichen dieselbe wie die Größe des Feldes mit der Nachricht.

Aber im Strom der Fransen blitzen manchmal fast exakte Bid-Werte auf, die auf der zweiten Seite stehen. Sie flackern einmal, und es gibt auch ein oder zwei Fransen in ihnen. Aber sie sind lesbar. Und dann, wieder, ein Strom von Flecken.

Es stellt sich heraus, dass auf der Absenderseite des Ereignisses zum Füllen der Ressource alles richtig gemacht wird. Dann nimmt die lesende Seite die Ressource an, die intern beschädigt und verschmutzt ist. Je schneller die lesende Partei die Nachricht in der Ressource liest, desto unversehrter wird die Nachricht sein.

Sie benötigen also eine genaue Lese-/Schreibsynchronisation?


ZS: Lieber fxsaber, können Sie klären, was hier falsch ist?

Ich hänge die Dateien an:

Dateien:
 
Реter Konow:

ZS: Lieber fxsaber, kannst du erklären, was hier falsch ist?

Viele Menschen hier sehen Ihre Fehler sofort, ziehen es aber vor, zu schweigen, da dies mit Gefahren verbunden ist. Und ich verstehe sie sehr gut. Ich würde im Voraus sagen, dass ich danach nicht mehr antworten werde. Lernen Sie, nach Ihren eigenen Fehlern zu suchen und die Haltung der anderen richtig aufzubauen.


Zum Code.

Sie kopieren uint in uchar durch ArrayCopy - ein Fehler.

CharArrayToString - dies funktioniert, wenn Strings ANSI sind.


Klärung der Besonderheiten der Byte-Darstellung von Typen.

 
fxsaber:

Viele Menschen hier sehen Ihre Fehler sofort, ziehen es aber vor, zu schweigen, da dies mit Gefahren verbunden ist. Und ich verstehe sie sehr gut. Ich werde danach nicht mehr antworten. Lernen Sie, nach Ihren eigenen Fehlern zu suchen und die Haltung der anderen richtig aufzubauen.


Zum Code.

Sie kopieren uint in uchar durch ArrayCopy - ein Fehler.

CharArrayToString - dies funktioniert, wenn Strings ANSI sind.


Versuchen Sie, die Eigenheiten der Byte-Darstellung von Typen zu verstehen.

Wenn die Menschen in meinem Umfeld meine Lösungen respektieren, respektiere ich auch ihre. Nun, anders geht es nicht. Gegenseitiger Respekt.

Nach dem Code. Ich danke Ihnen. Ich werde sehen, was ich tun kann.

 

Scheiße, ich habe es satt. Ich habe einen halben Tag gebraucht, um es herauszufinden.

Ich habe die Gewerkschaften bereits ausfindig gemacht. Aber diese Lösung ist eine Krücke in einem Würfel. Sie brauchen dort immer noch Byte-Operationen. Aber für meine Aufgaben ist das völlig irrelevant.

Es ist viel einfacher, mit Objektbeschreibungen zu arbeiten. Es ist garantiert und einfach. Aber ich weiß nicht, ob die Ressourcen über das Prüfgerät funktionieren werden. Das ist die Mühe nicht wert.

Hier ist eine Lösung über die Gewerkschaften:

//+------------------------------------------------------------------+
//|                                                    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()
  {
//---
   
  }
//+------------------------------------------------------------------+

Und eine Leseanzeige:

//+------------------------------------------------------------------+
//|                                              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);
   //-----------------------------
  }
//+------------------------------------------------------------------+
 

Ich bekomme ständig Krokodile. Es ist immer anders. Es gibt also jede Menge Müll in der Ressource. Wenn der Inhalt gleich bliebe, würde sich nicht allzu viel ändern.

Im Allgemeinen ist es nicht klar, wie das alles funktionieren soll...

Vielleicht finde ich später eine Lösung....

 

Gewerkschaften sind sicherlich eine interessante Sache. Allerdings fällt mir nicht ein, für welche Zwecke (außer der Erhaltung einer Ressource) sie nützlich sein könnte.