Librerie: Mappatura della memoria

 

Mappatura della memoria:

DLL (progetto VC++ 2010) per lavorare con il Memory Mapping.

Author: ---

 

Potrebbe essere utile a qualcuno:

In alternativa, è possibile creare un disco RAM e inserirvi i file. Il disco RAM è un disco virtuale situato nella RAM del computer.

Io uso un software di questo tipo per creare un disco Ram http://ramdisk.nm.ru/ramdiskent-rus.htm.

 

Vorrei che tutto questo potesse essere scritto in MQL in modo da poterlo utilizzare senza dll.

Grazie Alex, roba forte.

 
Urain:

Sarebbe bello se tutto questo potesse essere implementato in MQL in modo da poterlo usare senza dll.

Purtroppo, l'intero problema risiede in una singola funzione, MapViewOfFile, che restituisce un puntatore, quindi non è possibile utilizzarla direttamente in MQL... non è possibile portare un puntatore a un array.

Tutte le altre funzioni (ce ne sono solo 4 -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) possono essere chiamate.
ma solo questa MapViewOfFile non ha dato la possibilità di creare un lavoro completamente funzionale da MQL con la mappatura direttamente. ed è un peccato, volevo davvero farlo senza una DLL scritta da me.

 
sergeev:

Purtroppo, l'intero problema risiede in una singola funzione, MapViewOfFile, che restituisce un puntatore, quindi non è possibile utilizzarla direttamente in MQL... non è possibile portare un puntatore a un array.

Tutte le altre funzioni (ce ne sono solo 4 -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) possono essere chiamate.
ma solo questa MapViewOfile non ha dato l'opportunità di creare un lavoro completamente funzionale da MQL con la mappatura direttamente. ed è un peccato, anch'io volevo davvero fare a meno di una DLL scritta in proprio.

In realtà non si tratta di te, il messaggio era rivolto agli sviluppatori di MQ, il problema è vecchio e la sua soluzione è ovviamente richiesta.

ZY Ho scritto funzioni di passaggio di puntatori ad array tramite evento per scopi simili (ma all'interno di una MT), ma non funzionava nemmeno senza DLL, sebbene le funzioni nella DLL fossero a riga singola.

 
Urain:

In realtà non sei tu, il messaggio era rivolto agli sviluppatori di MQ, il problema è vecchio e la sua soluzione è ovviamente richiesta.

Oh sì, ciò che è necessario è necessario.

Avete mai fatto qualcosa per creare una funzione convertitore?

Ad esempio, alcune funzioni dll restituiscono un puntatore, quindi abbiamo int(4). Nella maggior parte dei casi si tratta di un puntatore a una struttura.

Il compito successivo è quello di estrarre i dati da questa struttura. Conosciamo la dimensione della struttura, quindi possiamo prima tradurre questo puntatore in un puntatore a un array di caratteri.

Come fare questa riassegnazione? Come imbrogliare? Forse attraverso una funzione dll intermedia, in cui passare il puntatore e che restituirà questo array di caratteri?
Bene, e poi questo array di caratteri con un semplice = trasferimento alla nostra struttura.

Ecco una variante di tale funzione in dll

void Convert(char *_in, char *_out) { _out=_in; }

ed è chiamata da mql in questo modo

// ad esempio la funzione api ha restituito un puntatore a una struttura dati
int ptr=ФункцияИзАпи(); // puntatore a ДанныеИзАпи

struct ДанныеИзАпи
{
  // struttura dati da api 16 byte
};

struct refData
{
 char byte[16]; // immagine della stessa struttura, anch'essa = 16 byte 
};

refData ref;

Convert(ptr, ref.byte); // ha tradotto il puntatore all'array

ДанныеИзАпи data=ref; // riempire i campi della struttura con una semplice copia

PS
Anche se mi è venuta un'idea con memcpy, che copia anche tramite puntatore. Dovrei provarla ora.
 
sì. memcpy funziona ! e in combinazione con strcpy è possibile elaborare correttamente anche le stringhe ,

quindi può funzionare direttamente!!!!
 

Un'altra pietra a favore del MK.

Perché questo giocherellare?

I loro programmi possono davvero rovinare la faccia?

 
Urain:

In realtà, non si tratta di una pietra contro di voi, il messaggio era rivolto agli sviluppatori MQ, il problema è vecchio e la sua soluzione è ovviamente richiesta.

Tutto sommato, tutto va bene, il problema è stato risolto, la bibbia per MQL5 senza usare una DLL scritta in proprio è stata realizzata e testata con successo.

L'ho già inviata per la pubblicazione :)

 
her.human:

Un'altra pietra a favore del MK.

Perché questo giocherellare?

I loro programmi possono davvero rovinare la faccia?

I programmi MQ5/EX5 vengono distribuiti molto facilmente e senza un rigoroso controllo di sicurezza possono causare danni irreparabili agli utenti.

Ecco perché il linguaggio applicativo MQL5 è stato creato protetto, senza la possibilità di chiamare funzioni pericolose e lavorando nella propria sandbox. È prevista l'integrazione con librerie DLL per estendere le funzionalità.

 
Renat:

I programmi MQ5/EX5 sono molto facili da distribuire e senza un rigoroso controllo di sicurezza possono causare danni irreparabili agli utenti.

Per questo motivo il linguaggio applicativo MQL5 è stato progettato per essere protetto, senza la possibilità di chiamare funzioni pericolose e lavorando nella propria sandbox. È prevista l'integrazione con librerie DLL per estendere le funzionalità.

E il mercato?

O le win dll saranno ammesse nel mercato?

In generale, conosco la risposta, per questo ho suggerito di inserire questa implementazione nello standard MQL5.