Benim yaklaşımım. Çekirdek - Motor. - sayfa 94

 
Vitaly Muzichenko :

Harika bir monolog.)

Hamlet dinleniyor.)

 
Реter Konow :

Sorun ne?

hata -

ERR_RESOURCE_NOT_FOUND

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

Okuma yardımı.

Alıntı:

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

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

Okuma yardımı.

Alıntı:

Evet. Anladım. Yanlış bağlandı.

 
Реter Konow :
Düşünüyordum. Diğer programların kaynaklarını kullanmanın bir yolu var. Muhtemelen çözüm oradadır. Hemen belgelere bakacağım.

Kaynağı yanlış bağladı.

Kaynağını okumak istediğimiz programın yolunu belirtmelisiniz.

init okuyucu programında, başka bir programdaki kaynak dosyayla bağlantı kurmanız gerekir:

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

Ve bir kaynağı okurken, tam yolu da belirtin:

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

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

Ancak yeni bir saçmalık ortaya çıktı:

Bir kaynağı okurken, satırda hatalar var. İşte kod:

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

Ve en tuhafı, kaynakla birlikte Expert Advisor'ı çizelgeden kaldırırsanız, okuma programı bu kaynağı almaya devam edecektir. Ve bu kaynakta aynı krakozyabry ve her türlü çöp olacak. Üstelik çöp her zaman farklıdır.

Ve bununla nasıl başa çıkılır?

not. CharArrayToString() içinde diğer sayfa kodlamalarını belirtmeye çalışacağım.

 

İlginçtir ki, krakozyabr dizesinin boyutu, mesajın bulunduğu dizinin boyutuna karşılık gelir.

Ancak, krakozyabr akışında, ikinci tarafa kaydedilen neredeyse kesin Teklif değerleri bazen yanıp söner . Bir kez titriyorlar ve içlerinde de bir - iki krakozyabry var. Ama okunabilirler. Ve sonra yine krakozyabr akışı.

Gönderici tarafında kaynak doldurma olayında her şeyin doğru yapıldığı ortaya çıkıyor. Ardından okuyucu tarafı, bellekte bozulmuş ve çöpe atılmış bir kaynak alır. Okuyucu kaynaktaki mesajı ne kadar hızlı okursa, mesaj o kadar faydalı olacaktır.

Anlamı, okuma/yazmanın tam senkronizasyonu gerekli mi?


not. Sevgili fxsaber, burada neyin yanlış olduğunu açıklayabilir misiniz?

Ekli dosyalar:

Dosyalar:
 
Реter Konow :

not. Sevgili fxsaber, burada neyin yanlış olduğunu açıklayabilir misiniz?

Burada birçok kişi hatalarınızı hemen görür, ancak sessiz kalmayı tercih eder, çünkü. dolu. Ve onları çok iyi anlıyorum. Daha sonra cevap vermeyeceğimi önceden söyleyeceğim. Hatalarınızı kendi başınıza aramayı öğrenin ve çevrenizdeki diğerlerinin tutumunu doğru şekilde oluşturun.


Kodla.

uint'i ArrayCopy aracılığıyla uchar'a kopyalamak bir hatadır.

CharArrayToString - dizeler ANSI ise çalışır.


Türlerin bayt gösteriminin özelliklerini anlayın.

 
fxsaber :

Burada birçok insan hatalarınızı hemen görüyor ama sessiz kalmayı tercih ediyor çünkü. dolu. Ve onları çok iyi anlıyorum. Daha sonra cevap vermeyeceğimi önceden söyleyeceğim. Hatalarınızı kendi başınıza aramayı öğrenin ve çevrenizdeki diğerlerinin tutumunu doğru şekilde oluşturun.


Kodla.

uint'i ArrayCopy aracılığıyla uchar'a kopyalamak bir hatadır.

CharArrayToString - dizeler ANSI ise çalışır.


Türlerin bayt gösteriminin özelliklerini anlayın.

Başkaları kararlarıma saygı duyduğunda, ben de onların kararlarına saygı duyarım. Aksi halde. Karşılıklı saygı.

Kodla. Teşekkür ederim. Bunu çözmeye çalışacağım.

 

Lanet olsun, bundan bıktım. Bu karar için yarım gün boşa gitti.

Zaten ve sendikalarda anlaşıldı. Ancak bu çözüm, küpteki bir koltuk değneğidir. Hala bayt işlemleri gerekli. Ve görevlerim için genellikle alakasız.

Nesnelerin açıklamaları üzerinden çalışmak çok daha kolay. Garantili ve kolay. Ve kaynakların test cihazı aracılığıyla çalışıp çalışmayacağı bilinmiyor. Oyun muma değmez...

İşte sendikalar aracılığıyla çözüm:

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

Ve okuma göstergesi:

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

Her zaman krakozyabry'den tırmanın. Ve her zaman farklı. Bir kaynakta herhangi bir çöp var demektir. İçeriği değişmeseydi, krakozyabry değişmezdi.

Genel olarak, tüm bunların nasıl çalışması gerektiği açık değil ...

Belki sonra bir çözüm bulurum...

 

Sendikalar elbette ilginç bir şey. Ancak, bunun hangi görevler için (bir kaynakta depolamak dışında) yararlı olabileceği aklıma gelmiyor.