我的方法。核心是引擎。 - 页 94

 
Vitaly Muzichenko:

美丽的独白)

哈姆雷特休息了)。

 
Реter Konow:

那么,有什么问题呢?

错误 -

遇到的问题

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

阅读帮助。

引用。

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

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

阅读参考资料.

引用。

是的,想通了。我把它插错了。

 
Реter Konow:
我的想法是这样的。有一种方法可以使用其他程序的资源。我想解决方案就在那里。我必须在文档中查找。

不正确地连接了资源。

你需要指定我们想要读取其资源的程序的路径。

在阅读程序中,你必须在另一个程序中设置与资源文件的连接。

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

而奇怪的是,如果我们把带有资源的专家顾问从图表中删除,阅读程序将继续接收该资源。这个资源将有相同的红色文本和垃圾。垃圾总是不同的。

那你应该如何处理呢?

ZS.我将尝试在CharArrayToString() 中指定其他页面编码。

 

有趣的是,流苏线的大小与带有信息的阵列的大小 相对应。

但是,在流苏中,有时会闪现出几乎精确的Bid值,写在第二面。它们闪动一次,里面也有一两个流苏。但它们是可读的。然后,又是一阵阵的斑点。

事实证明,在资源填充事件的发送方,一切都做得很正确。然后,阅读方接受资源,该资源已在内部被破坏,并被扔掉了。读取方读取资源中的信息的速度越快,信息的完整性就越强。

所以你需要精确的读/写同步?


ZS,亲爱的fxsaber,你能澄清一下这里有什么问题吗?

我在此附上文件。

附加的文件:
 
Реter Konow:

ZS,亲爱的fxsaber,你能解释一下这里有什么问题吗?

这里的许多人立即看到了你的错误,但宁愿保持沉默,因为这充满了危险。而且我非常理解他们。我事先说过,我不会在事后回答。要学会寻找自己的错误,正确树立他人的态度。


对代码。

你通过ArrayCopy将uint复制到ugar中--一个错误。

CharArrayToString- 如果字符串是ANSI的,这将工作。


梳理类型的字节表示法的特殊性。

 
fxsaber:

这里的许多人直接看到了你的错误,但宁愿保持沉默,因为这充满了危险。而且我非常理解他们。事后我不会回答。要学会寻找自己的错误,正确树立他人的态度。


对代码。

你通过ArrayCopy将uint复制到ugar中--一个错误。

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

我一直收到鳄鱼。它总是不同的。因此,资源中存在着各种垃圾。如果它的内容是相同的,那么它就不会有太大的变化。

一般来说,不清楚这一切应该如何运作......

也许我以后会找到一个解决方案....

 

工会无疑是一个有趣的东西。然而,我并没有想到它可能会有什么用途(除了保护资源之外)。