Referências de matriz - página 3

 

C'um caraças -- o tamanho desta estrutura --

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

60 bytes ) mas isso é uma loucura. São 52 bytes para desembaralhar.

Se estiver interessado, aqui está o código inicial para escavar

#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[];
Não estou a perceber a essência deste parâmetro...
 
sergeev:
Não estou a perceber a essência deste parâmetro...

Que tal obter o endereço do primeiro elemento da matriz:

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


não funciona?

 
MetaDriver:

Que tal obter o endereço do primeiro elemento de uma matriz:

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


não funciona?

obras, claro.

mas ainda não compreendo porquê

ArrayStore::double x[];
 
sergeev:

Funciona, é claro.

Mas ainda não compreendo porquê

Eu também não percebo isso. :)
 
MetaDriver:
Eu também não percebo. :)

Vá lá.

Deixem-me repetir a tarefa de novo. Com o tempo O(1) em relação ao tamanho da série cronológica, faça referência a ele. Isto é, a cópia da matriz é proibida a priori.

A única maneira é ir buscar a estrutura da matriz. Assim, forçando o ponteiro da série temporal em vez do ponteiro da matriz, juntamente com alguns parâmetros, para fazer a estrutura pensar que está bem.

O tamanho da estrutura da matriz é de 52 bytes, 8 dos quais (presumivelmente) são de facto um ponteiro, o resto são configurações, como tamanho, reservas, propriedades da série AsSeries, etc. (Win7x64)

Agora, a tarefa é desembalar a estrutura e aprender a passar-lhe dados adequados.

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

obras, é claro.

Funciona, claro, mas desta forma obtemos um ponteiro para os dados, não podemos substituir o ponteiro, só podemos substituir os dados, por isso ... precisamos de ir mais fundo (c)
 

ou isso ou não compreendo o que é necessário.

No primeiro posto, o problema é definido:

Algum tipo de referência de matriz, como esta:

Mostrei-vos que a memcpia obtém com sucesso um ponteiro para a matriz.

Depois utilizar a mesma memcpia e obter os dados.


O que é que realmente precisa? Porque é que está a construir aqui algum tipo de estrutura? O que é que tem a ver com um ponteiro para uma matriz?

 
sergeev:

Em seguida, utilizar a memcpy e recuperar os dados.

Lentamente. Todas as funções dll são chamadas através de um invólucro.

Preciso de uma matriz normal sem cópia.

Dê uma vista de olhos ao primeiro posto. Tem um código muito preciso que diz exactamente o que eu quero.

 
TheXpert:

Lentamente. Todas as funções dll são chamadas através de um invólucro.

Preciso de uma matriz normal sem cópia.

Veja-se o primeiro posto. Há um código muito preciso que diz exactamente o que eu quero.

É simples:) Faça uma série cronológica completa no Quarteto (o seu é o nono) e a chave dourada está no seu bolso:)

Eles vão dar-lhe uma bofetada no pulso, imho. Não se pode invadir a vaca sagrada.