Librerie: Mappatura dei file senza DLL - pagina 4

 
sergeev:
trattarli come una variabile lunga di sizeof(<Type>)*<Number_Elements> e tutto funzionerà :)
Quindi questa classe è necessaria per trasferire solo un puntatore? Pensavo che fosse possibile utilizzare gli array in una sola volta :(
 
baramantan:
Quindi questa classe è necessaria solo per trasferire un puntatore? Pensavo che fosse possibile usare gli array in una volta sola :(
ti sei reso conto di quello che stavi chiedendo? :)
 
sergeev:
trattateli come una variabile long di sizeof(<Type>)*<Number_Elements> e tutto funzionerà :)

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();
}

Ho fatto bene? In caso contrario, cosa c'è di sbagliato?

 

baramantan:

Ho fatto bene?
Chiedete a Debug, lui lo sa al 100%.
 
sergeev:
Chiedi a debag, lui lo sa al 100%.

E perché devi rispondere al mio post spostando le frecce?

Puoi mostrare con un esempio come passare un array int o double?

 

Come farete a verificarlo se non avete nemmeno il debug? Siete abituati a studiare l'informatica su una lavagna senza computer a scuola?

Se volete dettagli ed esempi, leggete MSDN.


In generale, le persone possono essere impudenti. Hanno già trasferito tutto in MQL e masticato tutto con i commenti,
quindi per loro scrivere funzioni anche per i loro slivatori :) risulta strano.

;)

 
sergeev:

Come farete a verificarlo se non avete nemmeno il debug? Siete abituati a studiare l'informatica su una lavagna senza computer a scuola?

Se volete dettagli ed esempi, leggete MSDN.


In generale, le persone possono essere impudenti. Hanno già trasferito tutto in MQL e masticato tutto con i commenti,
quindi per loro scrivere funzioni anche per i loro slivatori :) risulta strano.

;)

Ora non capisco perché siete entrati nei miei post con le mie domande - se non volete rispondere nel merito? Sono scioccato, redazione!
 

Beh, risponderò alle mie stesse domande. Ho dovuto raccogliere questo prodotto incompleto e poco cotto.

Questa classe non può gestire array di int e double per un motivo molto semplice.

La funzione dichiarata non può accettare array di tipo int o double. La classe può gestire solo uchar " virtual int Write(const uchar &buf[],int sz); // scrivere il numero di byte specificato nella memoria "

Ho forgiato la ricetta per finalizzarla alle mie esigenze, sto postando quello che ho ottenuto, si possono passare solo array di int. Se l'autore non finalizza la sua creazione, posterò la mia in seguito.

File:
MemMapLib.mqh  17 kb
MemMap.mq5  2 kb
 
baramantan:

Risponderò alle mie stesse domande. Ho dovuto scavare un po'

così ho raggiunto il mio obiettivo :)

Questa classe non può accettare array di int e double per un motivo molto semplice.
La funzione dichiarata non può accettare array di tipo int o double.

È una verità ovvia: accetta uchar, non <qualche_tipo_necessario>.

Allo stesso modo si può chiedere a questo, come dite voi, "prodotto semilavorato" di salvare un array di strutture con stringhe. Pestando i piedi: perché l'autore non ha previsto il "formato di dati di cui ho bisogno".

Ma vi è stata data una funzione universale. meno di un byte non c'è nessun posto dove dividere. Ecco perché viene memorizzato.

Poiché qualsiasi tipo di dati può essere tradotto in un array di uchar (leggere i byte), è il più universale per una classe di questo tipo.

Ho messo insieme la ricetta per finalizzarla alle mie esigenze, sto postando quello che ho ottenuto, si possono passare solo array di int.

Era con uchar, ora è con int.

sì. progresso :)
 
sergeev:

quindi ho raggiunto il mio obiettivo :)

Beh, è una verità ovvia. accetta uchar, non <qualche_tipo_necessario>.

Allo stesso modo si può chiedere a questo, come dici tu, "prodotto semilavorato" di salvare un array di strutture con stringhe. Pestando i piedi: perché l'autore non ha previsto il "formato di dati di cui ho bisogno".

Ma vi è stata data una funzione universale. meno di un byte non c'è nessun posto dove dividere. Ecco perché viene memorizzato.

Poiché qualsiasi tipo di dati può essere tradotto in array di uchar (leggere i byte), è il più universale per una classe di questo tipo.

Era uchar, ora è int.

sì. progresso :))

Non sono un mega programmatore, ovviamente. Ma non capisco dove sia l'universalità? uchar non può essere universale perché limita l'utente, cioè: uchar è solo per valori positivi. Il valore minimo è zero, quello massimo 255.

Qualsiasi dato oltre il valore di uchar diventa uguale al valore massimo o minimo di uchar.

Sulla base di quanto detto, ho chiesto fin dall'inizio "come passare int o double". Non capisco il tuo punto di vista, capo.