Minha abordagem. O núcleo é o motor. - página 94

 
Vitaly Muzichenko:

Lindo monólogo)

Descansos Hamlet).

 
Реter Konow:

Então, o que está errado?

o erro -

ERR_RESOURCE_NOT_FOUND

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

Leia a ajuda .

Citação:

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

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

Leia a referência .

Citação:

Sim, já imaginava. Eu estava ligando-o mal.

 
Реter Konow:
Eis o que eu estava pensando. Há uma maneira de utilizar recursos de outros programas. Acho que a solução está lá. Terei que procurar na documentação.

Conectou incorretamente o recurso.

É preciso especificar o caminho para o programa cujo recurso queremos ler.

Na iniciativa do programa de leitura, você deve estabelecer a conexão com o arquivo de recursos em outro programa:

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

E ao ler o recurso, especifique também o caminho completo:

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

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

Mas, há um novo absurdo:

Ao ler o recurso, os pintas aparecem na linha. Aqui está o 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);
  }

E o estranho é que se removermos o Expert Advisor com o recurso do gráfico, o programa de leitura continuará a receber o recurso. Este recurso terá o mesmo texto vermelho e lixo. O lixo é sempre diferente.

E como você deve lidar com isso?

ZS. Vou tentar especificar outras codificações de página emCharArrayToString().

 

Curiosamente, o tamanho da linha de caracteres cursivos é o mesmo que o tamanho da matriz com a mensagem.

Mas, no fluxo de franjas, às vezes há flashes de valores quase exatos de Licitações que são escritos no segundo lado. Elas cintilam uma vez, e há uma ou duas franjas dentro delas também. Mas eles são legíveis. E depois, novamente, um fluxo de manchas.

Acontece que no lado do remetente do evento de preenchimento de recursos, tudo é feito corretamente. Então, o lado da leitura aceita o recurso, que foi corrompido internamente e conspurcado. Quanto mais rápido o leitor ler a mensagem no recurso, mais intacta será a mensagem.

Então você precisa de uma sincronização precisa de leitura/escrita?


ZS. Caro fxsaber, você pode esclarecer o que está errado aqui?

Estou anexando os arquivos:

Arquivos anexados:
 
Реter Konow:

ZS. Caro fxsaber, você pode explicar o que está errado aqui?

Muitas pessoas aqui vêem imediatamente seus erros, mas preferem manter o silêncio, pois ele está repleto de perigos. E eu os entendo muito bem. Eu diria com antecedência que não responderei depois. Aprenda a procurar por seus próprios erros e construa adequadamente a atitude dos outros.


Para o código.

Você copia o uctar para o uctar através do ArrayCopy - um erro.

CharArrayToString - isto funcionará se as cordas forem ANSI.


Classificar as peculiaridades da representação de tipos de bytes.

 
fxsaber:

Muitas pessoas aqui vêem seus erros imediatamente, mas preferem ficar caladas, pois está repleta de perigos. E eu os entendo muito bem. Não responderei depois. Aprenda a procurar por seus próprios erros e construa adequadamente a atitude dos outros.


Para o código.

Você copia o uctar para o uctar através do ArrayCopy - um erro.

CharArrayToString - isto funcionará se as cordas forem ANSI.


Tente entender as peculiaridades da representação de tipos de bytes.

Quando as pessoas ao meu redor respeitam minhas soluções, eu respeito as delas. Bem, não se pode fazer de outra forma. Respeito mútuo.

Pelo código. Obrigado. Vou ver o que posso fazer.

 

Merda, estou farto disso. Demorei meio dia para descobrir.

Já descobrimos os sindicatos. Mas esta solução é uma muleta em um cubo. Você ainda precisa de operações de byte lá. Mas para minhas tarefas, isso é completamente irrelevante.

É muito mais fácil trabalhar com descrições de objetos. É garantido e simples. Mas eu não sei se os recursos funcionarão através do testador. Não vale a pena o trabalho.

Aqui está uma solução através de 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()
  {
//---
   
  }
//+------------------------------------------------------------------+

E um indicador de leitura:

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

Eu continuo recebendo crocodilos. É sempre diferente. Portanto, há todo tipo de lixo no recurso. Se seu conteúdo fosse o mesmo, então ele não mudaria muito.

Em geral, não está claro como tudo isso deve funcionar...

Talvez eu encontre uma solução mais tarde....

 

Os sindicatos são certamente uma coisa interessante. No entanto, não me ocorre para que fins (além da conservação em um recurso) ele possa ser útil.