Références de tableaux - page 3

 

Bon sang, la taille de cette structure...

struct ArrayStore
{
   long reserved;
   double x[];
};

60 octets ) mais c'est fou. Ça fait 52 octets à déchiffrer.

Si vous êtes intéressé, voici le code initial pour creuser

#import "msvcrt.dll"
  long memcpy(long &dst, long &src, int cnt);
  long memcpy(uchar &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long reserved;
   double x[];
};

#define N 60
// sizeof(ArrayStore) == 60

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 0x11, 0x22);
   store.reserved = 0xFF;
   
   uchar array[N];
   ArrayInitialize(array, 0);
   
   memcpy(array, store.reserved, N);
   
   string s;
   for (int i = 0; i < N; i++)
   {
      s = s + " " + StringFormat("%.2X", array[i]);
   }
   Print(s);
}
 
ArrayStore::double x[];
Je ne comprends pas l'essentiel de ce paramètre...
 
sergeev:
Je n'arrive pas à saisir l'essentiel de ce paramètre...

Pourquoi ne pas obtenir l'adresse du premier élément du tableau?

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


ne fonctionne pas ?

 
MetaDriver:

Qu'en est-il de l'obtention de l'adresse du premier élément d'un tableau?

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


ne fonctionne pas ?

travaille bien sûr.

mais je ne comprends toujours pas pourquoi

ArrayStore::double x[];
 
sergeev:

Cela fonctionne, bien sûr.

Mais je ne comprends toujours pas pourquoi

Je ne comprends pas non plus. :)
 
MetaDriver:
Je ne comprends pas non plus. :)

Allez.

Je vais répéter la tâche à nouveau. Avec un temps O(1) relatif à la taille de la série chronologique, faites-y référence. C'est-à-dire que la copie d'un tableau est interdite a priori.

Le seul moyen est de récupérer la structure du tableau. Donc, forcer un pointeur de série temporelle au lieu d'un pointeur de tableau, avec quelques paramètres, pour que la structure pense que c'est correct.

La taille de la structure du tableau est de 52 octets, dont 8 (vraisemblablement) sont en fait un pointeur, le reste étant des paramètres, comme la taille, les réserves, les propriétés AsSeries, etc. (Win7x64)

Il s'agit maintenant de déballer la structure et d'apprendre à y glisser des données adéquates.

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
Основы языка / Операции и выражения / Другие операции - Документация по MQL5
 
sergeev:

fonctionne, bien sûr.

Cela fonctionne bien sûr, mais de cette façon nous obtenons un pointeur vers les données, nous ne pouvons pas remplacer le pointeur, nous pouvons seulement remplacer les données, donc ... nous devons aller plus loin (c)
 

Soit ça, soit je ne comprends pas ce qui est nécessaire.

Dans le premier post, vous posez le problème :

Une sorte de référence de tableau, comme ceci :

Je vous ai montré que memcpy réussit à obtenir un pointeur sur le tableau.

Ensuite, utilisez le même memcpy et récupérez les données.


Alors, de quoi avez-vous vraiment besoin ? Pourquoi construisez-vous une sorte de structure ici ? Qu'est-ce que cela a à voir avec un pointeur vers un tableau ?

 
sergeev:

Ensuite, utilisez memcpy et récupérez les données.

Doucement. Toutes les fonctions de la dll sont appelées via un wrapper.

J'ai besoin d'un tableau normal sans copie.

Jetez un coup d'œil au premier message. Il a un code très précis qui dit exactement ce que je veux.

 
TheXpert:

Doucement. Toutes les fonctions de la dll sont appelées via un wrapper.

J'ai besoin d'un tableau normal sans copie.

Regardez le premier post. Il y a un code très précis qui dit exactement ce que je veux.

C'est simple :) Faites un tableau de série temporelle à part entière dans Quartet (le vôtre est le neuvième) et la clé d'or est dans votre poche :)

Ils vous donneront une tape sur la main, imho. On ne peut pas taillader la vache sacrée.