阵列引用

 

动机。

重点是,在火鸡中你经常需要访问时间序列,这些时间序列被传递给OnCalculate。

这些函数的嵌套可能相当显著,我们必须把这个数组从OnCalculate拖到整个调用链中作为一个参数。

虽然在产业链的重要部分,这个阵列在地狱里是不需要的。

我们想要什么。

一些类似于数组引用的东西,像这样。

class TimeReference
{
//
   datetime Time[];
};

TimeReference TimeRef;

datetime F()
{
   return TimeRef.Time[0];
}

int OnCalculate(const int bars,
                const int counted,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& sprd[])
{
   TimeRef.Assign(time);
   F();
}

BUT。强制性条件--不应该有阵列复制

乍一看,这似乎是无法实现的。但我怀疑这是可以做到的。

先生们,你们怎么看?

 

它是一块内存。 MQL并没有明确地指向内存。

但你可以用memcpy 得到它。它返回你需要的东西。

然后你可以把这个值拖到你想去的地方。并以同样的方式使用memcpy。

请看我关于DLLs的文章

 
sergeev:
我怎样才能把这个指针塞回去呢?
 
同样的memcpy,这就是指针传递的地方。
 
sergeev:
这就是指针被传递到的地方。

不,他们可以拿走指针,但不能拿走滑板。

___________

好吧,所以这可能是不可能做到的。

 
TheXpert:
不,他们可以拿着指针,但不能溜走。

并将其滑入,经过测试。

 
sergeev:

并将其滑入,经过测试。

给我一个例子。
 
TheXpert:
给我看一个例子。

好吧,这是在文章中,不是吗?

我正在尝试插入代码,服务器冻结了。

 
sergeev:

好吧,这是在文章中,不是吗?

文章中没有提到。只有从一个数组向一个预先准备好的数组进行内存复制。
 
https://www.mql5.com/ru/articles/364#3

第一个例子

传递的是int Source - 基本上是一个内存地址

并复制到数组char Dest[10] 中。

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

现在你是否为所有类型的人重载了memcpy?

只是别忘了,地址大小对于64位来说是很长的。

--------------

建议一:你认为我们是否应该要求开发人员制作一个像long ArrayGetAddress( object array)这样的 本地函数?

如果他们不做,建议二:我们应该推动#ifdef。 Renat答应实施。

原因: