Referências de matriz

 

Motivo:

A questão é que muitas vezes, nos perus, é necessário ter acesso a séries de tempos, que são passadas para a OnCalculate.

O aninhamento destas funções pode ser bastante significativo, e temos de arrastar esta matriz da OnCalculate ao longo da cadeia de chamadas como parâmetro.

Enquanto que numa parte significativa da cadeia, esta matriz não é necessária no inferno.

O que nós queremos:

Alguma semblante de uma referência de matriz, como esta:

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

MAS. Condição obrigatória - não deve haver cópia de matriz.

À primeira vista, isto pode parecer irrealizável. Mas suspeito que isso possa ser feito.

O que acham, cavalheiros?

 

É um pedaço de memória. O MQL não aponta explicitamente para a memória.

Mas pode obtê-lo com memcpy. ele devolve o que precisa.

Depois pode arrastar esse valor para onde quiser. e usar a memcpia para o mesmo caminho.

ver o meu artigo em DLLs

 
sergeev:
Como é que volto a colocar este ponteiro?
 
A mesma memcpia, que é para onde o ponteiro é passado.
 
sergeev:
com memcpy. É para lá que o ponteiro é passado.

Não, eles podem levar o ponteiro mas não o escorregão.

___________

Está bem, então provavelmente é impossível fazê-lo correctamente.

 
TheXpert:
Não, eles podem levar o ponteiro mas não o escorregam.

e introduzi-la, testada.

 
sergeev:

e introduzi-la, testada.

Dêem-me um exemplo.
 
TheXpert:
Mostre-me um exemplo.

Bem, está no artigo, não está?

Tento inserir o código. O servidor congela.

 
sergeev:

Bem, está no artigo, não está?

Não está no artigo. Só existe cópia de memória de uma matriz para uma matriz pré-preparada.
 
https://www.mql5.com/ru/articles/364#3

primeiro exemplo

int Fonte é passada - essencialmente um endereço de memória

e copiado para a matriz de caracteres Destino[10]

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

acertou? está agora a sobrecarregar memórias para todos os tipos?

Só não se esqueça que o tamanho do endereço é longo para 64 bits.

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

Sugestão número um: acha que devemos pedir aos programadores que façam uma função nativa como ArrayGetAddress( object array) ?

Se não o fizerem, sugestão dois: devemos pressionar #ifdef. Renat prometeu implementá-lo.

Razão: