내 접근 방식. 코어 - 엔진. - 페이지 94

 
Vitaly Muzichenko :

훌륭한 독백.)

햄릿이 쉬고 있다.)

 
Реter Konow :

글쎄, 무슨 일이야?

실수 -

ERR_RESOURCE_NOT_FOUND

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

도움말 읽기.

인용문:

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

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

도움말 읽기.

인용문:

네. 이해했다. 잘못 연결되었습니다.

 
Реter Konow :
생각을 해봤는데. 다른 프로그램의 리소스를 사용하는 방법이 있습니다. 아마도 해결책이 거기에 있을 것입니다. 지금 바로 문서를 살펴보겠습니다.

리소스를 잘못 연결했습니다.

읽을 리소스가 있는 프로그램의 경로를 지정해야 합니다.

init 리더 프로그램에서 다른 프로그램의 리소스 파일에 대한 연결을 설정해야 합니다.

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

리소스를 읽을 때 전체 경로도 지정합니다.

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

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

그러나 새로운 난센스가 생겼습니다.

리소스를 읽을 때 버그가 줄에 나타납니다. 코드는 다음과 같습니다.

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

그리고 가장 이상한 점은 차트에서 리소스가 포함된 Expert Advisor를 제거하면 읽기 프로그램이 이 리소스를 계속 수신한다는 것입니다. 그리고이 자원에는 동일한 krakozyabry와 모든 종류의 쓰레기가 있습니다. 또한 쓰레기는 항상 다릅니다.

그리고 어떻게 대처해야 할까요?

추신. CharArrayToString() 에서 다른 페이지 인코딩을 지정하려고 합니다.

 

흥미롭게도 krakozyabr 문자열의 크기는 메시지 가 있는 배열의 크기와 일치합니다.

그러나 krakozyabr 스트림에서 거의 정확한 Bid 값이 때때로 깜박이며 두 번째 면에 기록됩니다. 그들은 한 번 깜박이고 그 안에 1-2 개의 krakozyabry도 있습니다. 그러나 그들은 읽을 수 있습니다. 그리고 다시, krakozyabr의 흐름.

발신자 측의 리소스를 채우는 경우 모든 것이 올바르게 수행되는 것으로 나타났습니다. 그런 다음 판독기 측에서는 메모리에서 손상되고 폐기된 리소스를 받습니다. 독자가 리소스의 메시지를 더 빨리 읽을수록 메시지는 더 유용합니다.

즉, 읽기/쓰기의 정확한 동기화가 필요합니까?


추신. 친애하는 fxsaber, 여기서 무엇이 잘못되었는지 설명해 주시겠습니까?

첨부 파일:

파일:
 
Реter Konow :

추신. 친애하는 fxsaber, 여기서 무엇이 잘못되었는지 설명해 주시겠습니까?

여기에서 많은 사람들이 귀하의 실수를 즉시 확인하지만 침묵을 선호하기 때문입니다. 충만한. 그리고 나는 그들을 아주 잘 이해합니다. 나중에 답장을 드리지 않는다는 점 미리 말씀드립니다. 스스로 실수를 찾는 법을 배우고 주변 사람들의 태도를 올바르게 구축하십시오.


코드로.

ArrayCopy를 통해 uint를 uchar로 복사하는 것은 오류입니다.

CharArrayToString - 문자열이 ANSI인 경우 작동합니다.


유형의 바이트 표현의 특성을 이해합니다.

 
fxsaber :

여기에서 많은 사람들이 당신의 실수를 즉시 확인하지만 침묵을 선호하기 때문입니다. 충만한. 그리고 나는 그들을 아주 잘 이해합니다. 나중에 답장을 드리지 않는다는 점 미리 말씀드립니다. 스스로 실수를 찾는 법을 배우고 주변 사람들의 태도를 올바르게 구축하십시오.


코드로.

ArrayCopy를 통해 uint를 uchar로 복사하는 것은 오류입니다.

CharArrayToString - 문자열이 ANSI인 경우 작동합니다.


유형의 바이트 표현의 특성을 이해합니다.

다른 사람들이 내 결정을 존중할 때 나도 그들의 결정을 존중합니다. 글쎄, 그렇지 않으면. 상호 존중.

코드로. 고맙습니다. 나는 그것을 알아 내려고 노력할 것입니다.

 

젠장, 난 지쳤어. 이 결정에 반나절이 낭비되었습니다.

이미 그리고 노동 조합에서 이해했습니다. 그러나 이 솔루션은 큐브의 목발입니다. 여전히 바이트 작업이 필요합니다. 그리고 내 작업에는 일반적으로 관련이 없습니다.

개체에 대한 설명을 통해 훨씬 쉽게 작업할 수 있습니다. 보장되고 간편합니다. 그리고 리소스가 테스터를 통해 작동할지 여부는 알 수 없습니다. 게임은 촛불 가치가 없습니다 ...

다음은 유니온을 통한 솔루션입니다.

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

항상 krakozyabry를 올라갑니다. 그리고 항상 다릅니다. 리소스에 쓰레기가 있음을 의미합니다. 내용이 변경되지 않은 경우 krakozyabry는 변경되지 않습니다.

일반적으로 이 모든 것이 어떻게 작동해야 하는지는 분명하지 않습니다 ...

나중에 해결책을 찾을 수 있을지도...

 

노조는 물론 흥미로운 일입니다. 그러나 이것이 유용할 수 있는 작업(리소스에 저장하는 것 외)에 대해서는 생각하지 않습니다.