Références de tableaux

 

Motif :

Le fait est qu'assez souvent, dans les dindes, vous avez besoin d'accéder aux séries temporelles, qui sont transmises à OnCalculate.

L'imbrication de ces fonctions peut être assez importante, et nous devons faire glisser ce tableau depuis OnCalculate tout au long de la chaîne d'appels en tant que paramètre.

Bien que dans une partie importante de la chaîne, ce tableau n'est pas nécessaire dans l'enfer.

Ce que nous voulons :

Un semblant de référence à un tableau, comme ceci :

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

MAIS. Condition obligatoire - il ne doit pas y avoir de copie de tableau.

À première vue, cela peut sembler irréalisable. Mais je pense que c'est possible.

Qu'en pensez-vous, messieurs ?

 

C'est un morceau de mémoire. MQL ne pointe pas explicitement vers la mémoire.

Mais vous pouvez l'obtenir avec memcpy. Il retourne ce dont vous avez besoin.

Ensuite, vous pouvez faire glisser cette valeur où vous voulez. et utiliser memcpy de la même manière.

consultez mon article sur les DLL

 
sergeev:
Comment je remets ce pointeur en place ?
 
Le même memcpy, qui est l'endroit où le pointeur est passé.
 
sergeev:
avec memcpy. C'est là que le pointeur est passé.

Non, ils peuvent prendre le pointeur mais pas la fiche.

___________

OK, il est probablement impossible de le faire correctement.

 
TheXpert:
Non, ils peuvent prendre le pointeur mais pas le glisser.

et le glisser dans, testé.

 
sergeev:

et le glisser dans, testé.

Donnez-moi un exemple.
 
TheXpert:
Montrez-moi un exemple.

Eh bien, c'est dans l'article, n'est-ce pas ?

J'essaie d'insérer le code, mais le serveur se bloque.

 
sergeev:

Eh bien, c'est dans l'article, n'est-ce pas ?

Ce n'est pas dans l'article. Il n'y a que la copie de mémoire d'un tableau vers un tableau préparé à l'avance.
 
https://www.mql5.com/ru/articles/364#3

premier exemple

int La source est transmise - essentiellement une adresse mémoire

et copié dans le tableau char Dest[10]

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

est-ce que tu as bien compris ? est-ce que tu surcharges memcpy pour tous les types maintenant ?

N'oubliez pas que la taille des adresses est longue pour 64 bits.

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

Suggestion numéro un : pensez-vous que nous devrions demander aux développeurs de créer une fonction native comme long ArrayGetAddress( object array) ?

S'ils ne le font pas, deuxième suggestion : nous devrions pousser #ifdef. Renat a promis de l'implémenter.