Ссылки на массив - страница 3

 

Офигееть -- размер sizeof вот такой структуры --

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

60 байт ) однако жесть. Это расковыривать 52 байта...

Кому интересно, вот начальный код для раскопок

#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[];
что то я не уловил сути этого параметра...
 
sergeev:
что то я не уловил сути этого параметра...

А как насчёт получить адрес первого элемента массива: 

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


не работает?

 
MetaDriver:

А как насчёт получить адрес первого элемента массива: 

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


не работает?

работает ессно.

но все равно не втыкаю - зачем

ArrayStore::double x[];
 
sergeev:

работает ессно.

но все равно не втыкаю - зачем

Это я тоже не втыкаю. :)
 
MetaDriver:
Это я тоже не втыкаю. :)

Да лаадно.

Повторю еще раз задачу. Со временем О(1) относительно размера таймсерии сделать на нее ссылку. Т.е. копирование массива запрещено априори.

Единственный способ -- захачить структуру массива. Т.е. подсунуть указатель таймсерии вместо указателя массива вместе с адекватными параметрами, чтобы структура думала что все ок.

Размер структуры массива -- 52 байта, из которых 8 (предположительно) собсно указатель, остальные -- настройки, типа размера, резерва, свойства AsSeries и т.п. (Win7x64)

Сейчас задача -- распарсить структуру и научиться подсовывать ей адекватные данные.

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

работает ессно.

работает ессно, но так мы получаем указатель на данные, подменить указатель не получится, только подменить данные, поэтому ... we need to go deeper (c)
 

то ли вокруг да около,  то ли я непонимаю что таки нужно

в первом посте ты поставил задачу:

Некоторое подобие ссылок на массив, типа такого:

я тебе показал, что memcpy успешно получает указатель на массив.

дальше той же memcpy пользуйся и получай данные.


так что тебе все таки надо?  зачем ты лепишь сюда какую-то структуру? еще и парсить её собираешься.  какое отношение имеет она к указателю на массив?

 
sergeev:

дальше той же memcpy пользуйся и получай данные.

Медленно. Все длл функции вызываются через враппер.

Мне нужен нормальный массив без копирования.

Посмотри первый пост. Там очень точно кодом написано то, что я хочу.

 
TheXpert:

Медленно. Все длл функции вызываются через враппер.

Мне нужен нормальный массив без копирования.

Посмотри первый пост. Там очень точно кодом написано то, что я хочу.

Все просто:) Сделайте в четверке полноценный массив-таймсерию (свой - девятый) и золотой ключик у Вас в кармане:) 

По рукам дадут, имхенько. Нельзя хачить священную корову. 

Причина обращения: