Ре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:
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í?
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.
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.
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 |//+------------------------------------------------------------------+intOnInit()
{
//----------------------------------------------if(!ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0))Print("Object is not created! ",GetLastError());
elsePrint("Object created!");
//-------------------------------if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"))Print("BMPFILE is not created!");
elsePrint("BMPFILE created!");
//----------------------------------------------return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timer
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---------------------------
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 |//+------------------------------------------------------------------+voidOnTimer()
{
//---
}
//+------------------------------------------------------------------+
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 |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetMillisecondTimer(5250);
if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\Tester EA.ex4::Resource"))Print("Resource is not connected!");
elsePrint("Resource connected!");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
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...
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.
Hermoso monólogo)
Hamlet descansa).
Entonces, ¿qué pasa?
el error -
ERR_RESOURCE_NOT_FOUND
https://www.mql5.com/ru/docs/runtime/resources
Lea la ayuda .
Cita:
https://www.mql5.com/ru/docs/runtime/resources
Lea la referencia .
Cita:
Sí. Me lo imaginé. Lo estaba enchufando mal.
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:
Y al leer el recurso, especifique también la ruta completa:
//--------------------------------------------
Pero, hay una nueva tontería:
Al leer el recurso, aparecen motas en la línea. Aquí está el código:
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:
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.
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:
Y un indicador de lectura:
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.