Bibliothèque: Cartographie de la mémoire

 

Cartographie de la mémoire:

DLL (projet VC++ 2010) pour travailler avec le mappage de la mémoire.

Author: ---

 

Cela peut être utile à quelqu'un :

Vous pouvez également créer un disque RAM et y placer des fichiers. Un disque RAM est un disque virtuel situé dans la mémoire vive de votre ordinateur.

J'utilise un tel logiciel pour créer un disque RAM http://ramdisk.nm.ru/ramdiskent-rus.htm

 

J'aimerais que tout cela soit écrit dans MQL pour pouvoir être utilisé sans dll.

Merci Alex, c'est super.

 
Urain:

Ce serait bien si tout cela pouvait être implémenté dans MQL afin de pouvoir être utilisé sans dll.

Malheureusement, tout le problème réside dans une seule fonction - MapViewOfFile- qui renvoie un pointeur, ce qui fait qu'on ne peut pas l'utiliser directement en MQL... on ne peut pas amener un pointeur à un tableau.

Toutes les autres fonctions (il n'y en a que 4 -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) peuvent être appelées.
mais seule cette MapViewOfFile n'a pas donné l'opportunité de créer un travail entièrement fonctionnel à partir de MQL avec le mapping directement. et c'est dommage, je voulais aussi vraiment le faire sans une DLL auto-écrite.

 
sergeev:

Malheureusement, tout le problème réside dans une seule fonction - MapViewOfFile. Elle renvoie un pointeur, donc vous ne pouvez pas l'utiliser directement dans MQL... vous ne pouvez pas apporter un pointeur à un tableau.

Toutes les autres fonctions (il n'y en a que 4 - CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) peuvent être appelées.
mais seule cette MapViewOfFile n'a pas donné l'opportunité de créer un travail entièrement fonctionnel à partir de MQL avec le mapping directement. et c'est dommage, j'ai moi-même vraiment voulu me passer d'une DLL écrite par mes soins.

En fait ce n'est pas vous, le message s'adressait aux développeurs MQ, le problème est ancien et sa solution est manifestement demandée.

ZY J'ai écrit des fonctions de passage de pointeurs à un tableau via un événement pour des raisons similaires (mais à l'intérieur d'un MT), mais cela n'a pas fonctionné sans DLL non plus, bien que les fonctions dans la DLL soient d'une seule ligne.

 
Urain:

En fait, ce n'est pas vous, le message s'adressait aux développeurs MQ, le problème est ancien et sa solution est manifestement demandée.

Oh oui, ce qui est nécessaire est nécessaire.

Avez-vous déjà fait quelque chose pour créer une fonction de conversion ?

Par exemple, une fonction dll renvoie un pointeur, nous avons donc int(4). Dans la plupart des cas, il s'agit d'un pointeur vers une structure.

La tâche suivante consiste à extraire des données de cette structure. Nous connaissons la taille de la structure, nous pouvons donc traduire ce pointeur en un pointeur vers un tableau de caractères.

Voiciune question : comment faire cette réaffectation ? Comment tricher ? Peut-être par le biais d'une fonction dll intermédiaire, dans laquelle passer le pointeur, et qui retournera ce tableau de caractères ?
Eh bien, et ensuite ce tableau de caractères par simple = transfert à notre structure.

Voici une variante d'une telle fonction en dll

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

et elle est appelée à partir de mql comme ceci

// par exemple, la fonction api a renvoyé un pointeur vers une structure de données
int ptr=ФункцияИзАпи(); // pointeur sur ДанныеИзАпи

struct ДанныеИзАпи
{
  // structure de données de l'api 16 octets
};

struct refData
{
 char byte[16]; // image de la même structure, également = 16 octets 
};

refData ref;

Convert(ptr, ref.byte); // traduit le pointeur sur le tableau

ДанныеИзАпи data=ref; // remplir les champs de la structure par simple copie

PS
Bien que j'ai eu une idée avec memcpy. Il copie aussi par pointeur. Je devrais l'essayer maintenant.
 
Oui. memcpy fonctionne ! et en conjonction avec strcpy , il est possible de traiter correctement même les chaînes de caractères ,

de sorte qu'il peut fonctionner directement !!!!
 

Une pierre de plus à l'édifice du MK.

Pourquoi un tel tripatouillage ?

Leurs propres programmes peuvent-ils vraiment gâcher le visage ?

 
Urain:

En fait, ce n'est pas une pierre contre vous, le message s'adressait aux développeurs MQ, le problème est ancien et sa solution est manifestement demandée.

En fin de compte, tout va bien, le problème a été résolu, la bible pour MQL5 sans utiliser une DLL auto-écrite a été réalisée et testée avec succès.

Je l'ai déjà envoyée pour publication :)

 
her.human:

Une pierre de plus à l'édifice du MK.

Pourquoi un tel tripatouillage ?

Leurs propres programmes peuvent-ils vraiment gâcher le visage ?

Les programmes MQ5/EX5 sont très facilement distribués et, sans un contrôle de sécurité strict, peuvent causer des dommages irréparables aux utilisateurs.

C'est pourquoi le langage d' application MQL5 a été créé protégé, sans possibilité d'appeler des fonctions dangereuses et travaillant dans son propre bac à sable. L'intégration avec des bibliothèques DLL permet d'étendre les fonctionnalités.

 
Renat:

Les programmes MQ5/EX5 sont très faciles à distribuer et, sans un contrôle de sécurité strict, ils peuvent causer des dommages irréparables aux utilisateurs.

C'est pourquoi le langage d' application MQL5 est conçu pour être protégé, sans possibilité d'appeler des fonctions dangereuses et en travaillant dans son propre bac à sable. L'intégration avec des bibliothèques DLL permet d'étendre les fonctionnalités.

Qu'en est-il du marché ?

Les win dlls seront-elles autorisées sur le marché ?

En général, je connais la réponse, c'est pourquoi j'ai suggéré d'intégrer cette implémentation dans le standard MQL5.