Mi enfoque. El núcleo es el motor. - página 94

 
Vitaly Muzichenko:

Hermoso monólogo)

Hamlet descansa).

 
Реter Konow:

Entonces, ¿qué pasa?

el error -

ERR_RESOURCE_NOT_FOUND

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

Lea la ayuda .

Cita:

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

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

Lea la referencia .

Cita:

Sí. Me lo imaginé. Lo estaba enchufando mal.

 
Реter Konow:
Esto es lo que estaba pensando. Existe la posibilidad de utilizar recursos de otros programas. Supongo que la solución está ahí. Tendré que buscar en la documentación.

Se ha conectado incorrectamente el recurso.

Es necesario especificar la ruta del programa cuyo recurso queremos leer.

En el Inite del programa de lectura, debe establecer la conexión con el archivo de recursos en otro programa:

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

Y al leer el recurso, especifique también la ruta completa:

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

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

Pero, hay una nueva tontería:

Al leer el recurso, aparecen motas en la línea. Aquí está el código:

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

Y lo raro es que si eliminamos el Asesor Experto con el recurso del gráfico, el programa de lectura seguirá recibiendo el recurso. Este recurso tendrá el mismo texto rojo y la misma basura. La basura siempre es diferente.

¿Y cómo hay que afrontarlo?

ZS. Intentaré especificar otras codificaciones de página enCharArrayToString().

 

Curiosamente, el tamaño de la línea de caracteres cursivos es el mismo que el de la matriz con el mensaje.

Pero, en la corriente de flecos hay a veces destellos de valores de licitación casi exactos que se escriben en la segunda cara. Parpadean una vez, y también hay uno o dos flecos en su interior. Pero son legibles. Y luego, de nuevo, una corriente de motas.

Resulta que en el lado del emisor del evento de llenado de recursos, todo se hace correctamente. Entonces, la parte lectora acepta el recurso, que ha sido corrompido internamente y ensuciado. Cuanto más rápido lea la parte lectora el mensaje en el recurso, más intacto estará el mensaje.

Entonces, ¿necesitas una sincronización precisa de lectura y escritura?


ZS. Estimado fxsaber ¿puede aclarar qué es lo que está mal aquí?

Adjunto los archivos:

Archivos adjuntos:
 
Реter Konow:

ZS. Estimado fxsaber, ¿puede explicar qué es lo que está mal aquí?

Mucha gente aquí ve inmediatamente sus errores, pero prefiere callar porque está cargado de peligro. Y los entiendo muy bien. Ya digo de antemano que no voy a contestar después. Aprende a buscar tus propios errores y a construir adecuadamente la actitud de los demás.


Al código.

Copias uint en uchar a través de ArrayCopy - un error.

CharArrayToString - esto funcionará si las cadenas son ANSI.


Resolver las peculiaridades de la representación de tipos en bytes.

 
fxsaber:

Mucha gente aquí ve sus errores de inmediato, pero prefiere callar porque está cargado de peligro. Y los entiendo muy bien. No responderé después. Aprende a buscar tus propios errores y a construir adecuadamente la actitud de los demás.


Al código.

Copias uint en uchar a través de ArrayCopy - un error.

CharArrayToString - esto funcionará si las cadenas son ANSI.


Intenta comprender las peculiaridades de la representación de tipos en bytes.

Cuando la gente que me rodea respeta mis soluciones, yo respeto las suyas. Bueno, no puede ser de otra manera. El respeto mutuo.

Por el código. Gracias. Veré lo que puedo hacer.

 

Mierda, estoy harto. Me llevó medio día averiguarlo.

Ya he descubierto los sindicatos. Pero esta solución es una muleta en un cubo. Todavía se necesitan operaciones de bytes allí. Pero para mis tareas, es completamente irrelevante.

Es mucho más fácil trabajar con descripciones de objetos. Está garantizado y es sencillo. Pero no sé si los recursos funcionarán a través del probador. No vale la pena.

He aquí una solución a través de los sindicatos:

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

Y un indicador de lectura:

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

Me siguen saliendo cocodrilos. Siempre es diferente. Así que hay todo tipo de basura en el recurso. Si su contenido fuera el mismo, entonces no cambiaría demasiado.

En general, no está claro cómo debería funcionar todo esto...

Tal vez encuentre una solución más adelante....

 

Los sindicatos son ciertamente una cosa interesante. Sin embargo, no se me ocurre para qué fines (aparte de la conservación en un recurso) podría ser útil.

Razón de la queja: