Array-Referenzen - Seite 3

 

Heilige Scheiße - die Größe dieser Struktur -

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

60 Bytes), aber das ist verrückt. Das sind 52 Bytes, die entschlüsselt werden müssen.

Falls es Sie interessiert, hier ist der Anfangscode zum Graben

#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[];
Ich verstehe den Sinn dieses Parameters nicht...
 
sergeev:
Ich scheine den Sinn dieses Parameters nicht zu verstehen...

Wie wäre es, die Adresse des ersten Elements des Arrays zu ermitteln?

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


nicht funktioniert?

 
MetaDriver:

Wie wäre es, die Adresse des ersten Elements eines Arrays zu ermitteln?

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


nicht funktioniert?

funktioniert natürlich.

aber ich verstehe immer noch nicht, warum

ArrayStore::double x[];
 
sergeev:

Das funktioniert natürlich.

Aber ich verstehe immer noch nicht, warum

Das verstehe ich auch nicht. :)
 
MetaDriver:
Ich verstehe das auch nicht. :)

Na los!

Ich werde die Aufgabe noch einmal wiederholen. Mit der Zeit O(1) in Bezug auf die Größe der Zeitreihe wird ein Verweis auf diese hergestellt. D.h. das Kopieren von Arrays ist a priori verboten.

Die einzige Möglichkeit ist, die Array-Struktur zu holen. Also, erzwingen Timeseries Pointer statt Array Pointer, zusammen mit einigen Parametern, um Struktur denken, es ist ok.

Die Größe der Array-Struktur beträgt 52 Bytes, von denen 8 (vermutlich) tatsächlich ein Zeiger sind, der Rest sind Einstellungen, wie Größe, Reserven, AsSeries-Eigenschaften usw. (Win7x64)

Nun geht es darum, die Struktur auszupacken und zu lernen, wie man ihr geeignete Daten zuführt.

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

funktioniert natürlich.

Es funktioniert natürlich, aber auf diese Weise erhalten wir einen Zeiger auf die Daten, wir können den Zeiger nicht ersetzen, wir können nur die Daten ersetzen, also ... wir müssen tiefer gehen (c)
 

Entweder das oder ich verstehe nicht, was nötig ist.

In Ihrem ersten Beitrag haben Sie das Problem dargelegt:

Eine Art von Array-Referenz, etwa so:

Ich habe Ihnen gezeigt, dass memcpy erfolgreich einen Zeiger auf das Array erhält.

Dann verwenden Sie das gleiche memcpy und erhalten die Daten.


Was brauchen Sie also wirklich? Warum bauen Sie hier eine Art Struktur? Was hat das mit einem Zeiger auf ein Array zu tun?

 
sergeev:

Verwenden Sie dann memcpy und rufen Sie die Daten ab.

Langsam. Alle DLL-Funktionen werden über einen Wrapper aufgerufen.

Ich brauche ein normales Array ohne Kopieren.

Werfen Sie einen Blick auf den ersten Beitrag. Sie hat einen sehr präzisen Code, der genau sagt, was ich will.

 
TheXpert:

Langsam. Alle DLL-Funktionen werden über einen Wrapper aufgerufen.

Ich brauche ein normales Array ohne Kopieren.

Sehen Sie sich den ersten Beitrag an. Es gibt einen sehr präzisen Code, der genau sagt, was ich will.

Es ist ganz einfach:) Erstellen Sie ein vollwertiges Zeitserien-Array in Quartet (Ihres ist das neunte) und der goldene Schlüssel ist in Ihrer Tasche:)

Sie werden Ihnen einen Klaps auf die Hand geben, denke ich. Man kann die heilige Kuh nicht hacken.

Grund der Beschwerde: