Мой подход. Ядро - Движок. - страница 95

 
Реter Konow:

Уже и в юнионах разобрался. 

До конца точно не разобрался. 

Это не правильно:

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

Правильно:

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());
   //-----------------------------
   double bid = u.Double;
   //-----------------------------
   Print(DoubleToString(bid));

И что за безалаберность в коде? У тебя структуры Char_Uint у получателя и отправителя разные!

 
Vasiliy Sokolov:

До конца точно не разобрался. 

Это не правильно:

Правильно:

И что за безалаберность в коде? У тебя структуры Char_Uint у получателя и отправителя разные!

Cпасибо, Василий. Не знал, что это обязательно. Хотя, вариант в котором структуры одинаковые, я тоже пробывал. 

В любом случае, на выходе получается совсем не то, что нужно. Вот код:

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

И получатель:

//+------------------------------------------------------------------+
//|                                              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];  
   double  Double; 
  };
//+------------------------------------------------------------------+
//| 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());
   //-----------------------------
   double bid = u.Double;
   //-----------------------------
   Print(DoubleToString(bid,5));
  }
//+------------------------------------------------------------------+

Результат:

2018.12.20 17:13:37.395 Resource reader GBPUSD,M5: 9223464270575144355.75808

Но, хотя бы не меняется. Значение постоянно. (хотя должно менятся, с изменением значения Bid).

 
Реter Konow:

Но, хотя бы не меняется. Значение постоянно. (хотя должно менятся, с изменением значения Bid).

Вот это очень странно, потому что твой пример на моем компьютере работает верно. Попробуй обоих сделать экспертами и разместить просто на двух графиках.

 
Vasiliy Sokolov:

Вот это очень странно, потому что твой пример на моем компьютере работает верно. Попробуй обоих сделать экспертами и разместить просто на двух графиках.

Ок.

 

Вот код второго эксперта на втором графике. Результат тот же...

//+------------------------------------------------------------------+
//|                                                  Tester EA 2.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; 
  };
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
   if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\Tester EA.ex4::Resource"))Print("Resource is not connected!");
   else Print("Resource connected!");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
  Char_Uint u;
   uint width,height;
   //-----------------------------
   if(!ResourceReadImage("\\Experts\\Tester EA.ex4::Resource",u.Uint,width,height))Print("Failed to read resource!  ",GetLastError());
   //-----------------------------
   double bid = u.Double;
   //-----------------------------
   Print(DoubleToString(bid,5));
  }
//+------------------------------------------------------------------+

Не работает как надо.

 
Вот навсякий случай мои исходники, проверь их:
Файлы:
 
Vasiliy Sokolov:
Вот навсякий случай мои исходники, проверь их:

Нет. Тоже самое. Может это из за пробелов в именах экспертов? Ты их скачал без пробелов (автопереименование), а у меня пробелы. Щас переделаю.

 
Реter Konow:

Нет. Тоже самое. Может это из за пробелов в именах экспертов? Ты их скачал без пробелов (автопереименование), а у меня пробелы. Щас переделаю.

Пробуй. Использование пробелов крайне не желательно. Избавляйся от этой дурной привычки.

 

Пишет:

2018.12.20 17:46:26.798 Tester_EA_2 EURCHF,H1: 0.00000
2018.12.20 17:46:34.801 Tester_EA_2 EURCHF,H1: Failed to read resource!  4100
4100 - 

ERR_SOME_FILE_ERROR

 

Понял. Ошибка чтения файла, - просто забыл добавить черточку. Добавил и вернулся к результату:

2018.12.20 17:55:24.590 Tester_EA_2 EURCHF,H1: 9223464270575144355.75808