Bibliotecas: Mapeamento de Arquivo sem DLL - página 4

 
sergeev:
Trate-os como uma variável longa de sizeof(<Type>)*<Number_Elements> e tudo dará certo :)
Então essa classe é necessária para transferir apenas um ponteiro? Achei que fosse possível usar matrizes de uma só vez :(
 
baramantan:
Então, essa classe é necessária apenas para transferir um ponteiro? Pensei que fosse possível usar matrizes de uma só vez :(
Você se deu conta do que estava perguntando? :)
 
sergeev:
Trate-os como variáveis longas de sizeof(<Type>)*<Number_Elements> e tudo dará certo :)

void OnStart()
{
CMemMapFile hmem;
int err=hmem.Open("Local\\\\test",111,modeCreate);

int data[];
ArrayResize(data,50);

err=hmem.Write(data,ArraySize(data)*sizeof(int));

ArrayInitialize(data,0);
hmem.Seek(0,SEEK_SET);
err=hmem.Read(data, ArraySize(data)*sizeof(int) );


hmem.Close();
}

Fiz tudo certo? Se não, o que está errado?

 

baramantan:

Eu fiz tudo certo?
Pergunte ao Debug, ele sabe 100%.
 
sergeev:
Pergunte ao debag, ele sabe 100%.

E por que você tem que responder à minha postagem mudando as setas?

Você pode mostrar por exemplo como passar um array int ou double?

 

Como você vai verificá-lo se nem sequer tem depuração? Você está acostumado a estudar ciência da computação em um quadro negro sem computador na escola?

Se quiser detalhes e exemplos, leia o MSDN.


Em geral, as pessoas podem ser imprudentes. Elas já transferiram tudo para o MQL e mastigaram tudo com comentários,
então, para elas, escrever funções para seus slivators também :) acaba sendo estranho.

;)

 
sergeev:

Como você vai verificá-lo se nem sequer tem depuração? Você está acostumado a estudar ciência da computação em um quadro negro sem computador na escola?

Se quiser detalhes e exemplos, leia o MSDN.


Em geral, as pessoas podem ser imprudentes. Elas já transferiram tudo para o MQL e mastigaram tudo com comentários,
então, para elas, escrever funções para seus slivators também :) acaba sendo estranho.

;)

Agora não entendo por que vocês entraram em minhas postagens com minhas perguntas, se não querem respondê-las em substância? Estou chocado, equipe editorial!
 

Bem, vou responder minhas próprias perguntas. Tive que pegar esse produto meio acabado e mal cozido.

Essa classe não pode manipular matrizes int e double por um motivo muito simples.

A função declarada não pode aceitar matrizes dos tipos int ou double. A classe só pode manipular uchar " virtual int Write(const uchar &buf[],int sz); // escreve o número especificado de bytes na memória "

Eu forjei a receita para finalizá-la para minhas necessidades, estou postando o que consegui, você só pode passar matrizes int. Se o autor não finalizar sua criação, postarei a minha mais tarde.

Arquivos anexados:
MemMapLib.mqh  17 kb
MemMap.mq5  2 kb
 
baramantan:

Vou responder às minhas próprias perguntas. Tive que fazer algumas pesquisas

então cumpri meu objetivo :)

Essa classe não pode aceitar matrizes int e double por um motivo muito simples.
A função declarada não pode aceitar matrizes do tipo int ou double.

Bem, essa é uma verdade óbvia: ela aceita uchar, não <some_needed_type>.

Da mesma forma, você pode exigir desse, como você diz, "produto semiacabado" para salvar uma matriz de estruturas com strings. Batendo o pé - por que o autor não previu o "formato de dados de que preciso".

Mas você recebeu uma função universal. menos de um byte, não há lugar para dividir. É por isso que ele é armazenado.

Como qualquer tipo de dado pode ser traduzido em uma matriz uchar (ler bytes), é o mais universal para essa classe.

Eu juntei a receita para modificá-la de acordo com minhas necessidades, e estou postando o que consegui: você só pode passar arrays int.

Era com uchar, agora é com int.

sim. progresso :)
 
sergeev:

portanto, cumpri meu objetivo :)

Bem, é uma verdade óbvia. Ele aceita uchar, não <some_necessary_type>.

Da mesma forma, você pode exigir desse, como você disse, "produto semiacabado" para salvar uma matriz de estruturas com strings. Batendo o pé - por que o autor não previu o "formato de dados de que preciso".

Mas você recebeu uma função universal. menos de um byte, não há lugar para dividir. É por isso que ele é armazenado.

Como qualquer tipo de dados pode ser traduzido em uma matriz uchar (ler bytes), ela é a mais universal para essa classe.

Era uchar, agora é int.

sim. progresso :))

Não sou um mega programador, é claro. Mas não entendo onde está a universalidade? uchar não pode ser universal porque limita o usuário, a saber: uchar serve apenas para valores positivos. O valor mínimo é zero, o valor máximo é 255.

Qualquer dado além do valor de uchar se torna igual ao valor máximo ou mínimo de uchar.

Com base no que eu disse, perguntei desde o início "como passar int ou double". Não entendi seu ponto, chefe.