错误、漏洞、问题 - 页 727

 
Renat:

有人提出了一个 关于FileReadArray的问题,在解释中我指出它有一个读取错误数据类型的功能

因此,问题是:这一功能如何与语言安全相适应?

如果可以的话,为什么不做一个标准的函数来把一个位域转换为正确的类型呢?

总的来说,要么按部就班,删除这个功能,要么让人们实现长算术。

下面是一个通过擦拭文件来实现这一功能的例子。

double arr[]; ulong arr1[]; 
//+------------------------------------------------------------------+
void OnStart()
  {   
   ArrayResize(arr,1); arr[0]=123.2564;
   WriteArrayFile();
   ReadArrayFile();
   Print(arr1[0]);
  }
//+------------------------------------------------------------------+
void WriteArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_WRITE|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileWriteArray(han,arr);              
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
void ReadArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_READ|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileReadArray(han,arr1);             
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
 
检测到偏执狂。
 
TheXpert:
检测到偏执狂。

你应该好好想想。

实际上我赞成认为它是安全的,不使用文件而直接制作其对应的文件。

但如果MQ认为它是不安全的,那么也应该从函数中删除。

ZZZY 顺便说一句,也许我今天真的拖错了东西,我还没有回答两个问题,你给我指点一下,指点一下哪里愚蠢。

 
Urain:

这里有一个通过文件与擦拭螺丝来修复的例子。


为什么要翻阅文件?比这更容易。阅读关于简单结构的数据类型转换
 
 
Renat:
在十字星上测试时,有准确的建模和其他比率,以正确转换利润和保证金要求。
试着运行可视化,你会立即明白基于市场观察中的背景字符数量的计算量。
我都能理解,但13.7倍的速度差异...嗯,2倍也行。而主力股开盘价 测试速度的小狗般的喜悦已经被十字星上的泪眼朦胧的沮丧所取代。而不是使用30个本地远程代理,我们将再次不得不贿赂克隆人......。深渊!
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Urain:

发展思想。

实际上我赞成认为它是安全的,不使用文件而直接制作其对应的文件。

但如果MQ认为它不安全,也应该从函数中删除。

ZZZY顺便说一句,也许我今天真的是胡言乱语了,我还没有回答两个问题,你真的给我指点迷津,指点迷津的地方。

文件本身是没有个性的。事先不知道这个文件是以哪种方式写的。换言之,不能禁止上述功能。当然,你可以有机地检测一个纯文本文件,而且在Unicode和Ansi-encodings方面也有一些问题。

所以你可以随意阅读任何文件。而且它不会导致任何危险的情况,因为读(和写)的大小是受控制的。你将无法打破这堆东西。你将无法以任何方式获得进入进程内存的地址。

 
muallch:
我可以理解,但13.7倍的速度差异......。嗯,2倍也行。而在主力股开盘价 上测试速度的小狗般的喜悦已经被十字星上的流泪沮丧所取代。而不是使用30个本地远程代理,我们将再次不得不贿赂克隆人......。深渊!
我们正在研究这个问题。对十字星的开盘价测试将被加速。
 
stringo:

文件本身是一个非个人化的文件。事先不知道该文件是如何记录的。换言之,不能禁止上述功能。当然,有可能对纯文本文件进行有机检测,而且Unicode和Ansi编码也有细微差别。

所以你可以随意阅读任何文件。而且它不会导致任何危险的情况,因为读(和写)的大小是受控制的。你将无法打破这堆东西。你不能以任何方式将地址进入进程内存。

那么我认为没有理由不引入一个无需类型转换 的直接读函数,就像

double a=123.2564; ulong b;

b=Byte(a,TYPE_ULONG);
Print(b);
//--- результат 4638373815016729713

把它放在一个函数中,一切都会很安全。

 
Urain:

那么我认为没有理由不引入一个无需类型转换 的直接数据读取功能,就像

把它放在一个职能部门,一切都将是安全的。

struct __double { double v; }

struct __long { long v; }

双重a;__长b。

a.v=123.456。

b=a。

b.v=4638373815016729713;

不难。

+阅读除了顶级链接https://www.mql5.com/ru/articles/364


而从一种类型到另一种类型的转换,可以使用宏或函数来完成。

但没有什么真正复杂的事情。

Избавляемся от балласта самодельных DLL
Избавляемся от балласта самодельных DLL
  • 2012.01.31
  • o_O
  • www.mql5.com
Если MQL5-программисту недостаточно функционала языка, он вынужден обращаться к дополнительным инструментам. Для этого приходится использовать другой язык программирования и создавать промежуточную DLL. В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя. В данной статье мы поставим точку в этом вопросе и покажем простые механизмы обмена сложными типами данных и работе с ними.