Bibliotheken: Memory Mapping

 

Memory Mapping:

DLL (MS VC++ 2010) für die Arbeit mit Speicherabbilddateien (Memory Mapped Files).

Sie wurden entworfen, um mit Speicherabbilddateien zu arbeiten. Sie können:

  • Eine Datei im Speicher erstellen;
  • Von einer Speicherabbilddatei lesen und schreiben;
  • Es gibt eine Möglichkeit Daten zwischen Anwendungen auszutauschen, einschließlich MetaTrader 4 und МetaТrader 5.

Autor: o_O

 

Das könnte für jemanden nützlich sein:

Alternativ können Sie auch eine RAM-Disk erstellen und Dateien darauf ablegen. Die Ram-Disk ist eine virtuelle Disk, die sich im RAM Ihres Computers befindet.

Ich verwende eine solche Software, um eine Ram-Disk zu erstellen http://ramdisk.nm.ru/ramdiskent-rus.htm

 

Ich wünschte, man könnte das alles in MQL schreiben, so dass man es ohne DLL verwenden könnte.

Danke Alex, tolle Sache.

 
Urain:

Es wäre schön, wenn all dies in MQL implementiert werden könnte, so dass es ohne DLL verwendet werden könnte.

Leider liegt das ganze Problem in einer einzigen Funktion - MapViewOfFile. Sie gibt einen Zeiger zurück, also kann man sie nicht direkt in MQL verwenden... man kann keinen Zeiger auf ein Array bringen.

Alle anderen Funktionen (es gibt nur 4 von ihnen -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) können aufgerufen werden.
aber nur diese MapViewOfFile gab nicht die Möglichkeit, eine voll funktionsfähige Arbeit von MQL mit Mapping direkt zu erstellen. und es ist schade, ich wollte es auch wirklich ohne eine selbstgeschriebene DLL tun.

 
sergeev:

Leider liegt das ganze Problem in einer einzigen Funktion - MapViewOfFile. Sie gibt einen Zeiger zurück, also kann man sie nicht direkt in MQL verwenden... man kann keinen Zeiger auf ein Array bringen.

Alle anderen Funktionen (es gibt nur 4 davon -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) können aufgerufen werden.
aber nur diese MapViewOfFile gab nicht die Möglichkeit, ein voll funktionsfähiges Werk aus MQL mit Mapping direkt zu erstellen. und es ist schade, ich selbst wollte auch wirklich auf eine selbstgeschriebene DLL verzichten.

Eigentlich geht es nicht um dich, die Nachricht war an die MQ-Entwickler, das Problem ist alt und seine Lösung ist offensichtlich gefragt.

ZY Ich habe Funktionen zur Übergabe von Zeigern auf Array via Event für ähnliche Zwecke geschrieben (aber innerhalb einer MT), aber es hat auch nicht ohne DLL funktioniert, obwohl die Funktionen in der DLL einzeilig waren.

 
Urain:

Eigentlich geht es nicht um Sie, die Nachricht war an die MQ-Entwickler gerichtet, das Problem ist alt und seine Lösung ist offensichtlich gefragt.

Oh ja, was gebraucht wird, wird gebraucht.

Haben Sie jemals etwas getan, um eine Konverterfunktion zu erstellen?

Zum Beispiel gibt irgendeine DLL-Funktion einen Zeiger zurück, also haben wir int(4). In den meisten Fällen wird es ein Zeiger auf eine Struktur sein.

Und die nächste Aufgabe besteht darin, Daten aus dieser Struktur zu ziehen. Da wir die Größe der Struktur kennen, können wir diesen Zeiger zunächst in einen Zeiger auf ein char-Array umwandeln.

Hier ist eine Frage - wie kann man diese Umwidmung vornehmen? Wie kann man schummeln? Vielleicht durch eine zwischengeschaltete DLL-Funktion, der man den Zeiger übergibt, und die dieses Char-Array zurückgibt?
Nun, und dann wird dieses Char-Array durch einfache = Übertragung in unsere Struktur.

Hier ist eine Variante einer solchen Funktion in dll

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

und sie wird von mql wie folgt aufgerufen

// z.B. die Funktion api gibt einen Zeiger auf eine Datenstruktur zurück
int ptr=ФункцияИзАпи(); // Zeiger auf ДанныеИзАпи

struct ДанныеИзАпи
{
  // Datenstruktur von api 16 Bytes
};

struct refData
{
 char byte[16]; // Bild der gleichen Struktur, ebenfalls = 16 Bytes 
};

refData ref;

Convert(ptr, ref.byte); // übersetzt den Zeiger auf das Array

ДанныеИзАпи data=ref; // Füllen Sie die Felder der Struktur durch einfaches Kopieren

PS
Obwohl ich mit memcpy auf eine Idee gekommen bin. Es kopiert auch per Zeiger. Ich sollte es jetzt ausprobieren.
 
ja. memcpy funktioniert ! und in Verbindung mit strcpy ist es möglich, auch Strings korrekt zu verarbeiten,

so kann es direkt funktionieren!!!!
 

Ein weiterer Stein zu Gunsten der MK.

Warum diese Fummelei?

Können ihre eigenen Programme wirklich das Gesicht verunstalten?

 
Urain:

Eigentlich ist das kein Stein auf dem anderen, die Nachricht ging an die MQ-Entwickler, das Problem ist alt und seine Lösung ist offensichtlich gefragt.

Alles in allem ist alles gut, das Problem ist gelöst, die Bibel für MQL5 ohne Verwendung einer selbstgeschriebenen DLL wurde erfolgreich erstellt und getestet.

Ich habe sie bereits zur Veröffentlichung geschickt :)

 
her.human:

Ein weiterer Stein zu Gunsten der MK.

Warum diese Fummelei?

Können ihre eigenen Programme wirklich das Gesicht verunstalten?

MQ5/EX5-Programme lassen sich sehr leicht verbreiten und können ohne strenge Sicherheitskontrolle bei den Benutzern irreparablen Schaden anrichten.

Deshalb wurde die MQL5-Anwendungssprache geschützt erstellt, ohne die Möglichkeit, gefährliche Funktionen aufzurufen und in einer eigenen Sandbox zu arbeiten. Es gibt eine Integration mit DLL-Bibliotheken, um die Funktionalität zu erweitern.

 
Renat:

MQ5/EX5-Programme sind sehr leicht zu verbreiten und können ohne strenge Sicherheitskontrolle irreparable Schäden bei den Benutzern verursachen.

Aus diesem Grund ist die MQL5-Anwendungssprache so konzipiert, dass sie geschützt ist, keine gefährlichen Funktionen aufrufen kann und in einer eigenen Sandbox arbeitet. Es gibt eine Integration mit DLL-Bibliotheken, um die Funktionalität zu erweitern.

Was ist mit dem Markt?

Oder werden Win-DLLs auf dem Markt zugelassen sein?

Im Allgemeinen kenne ich die Antwort, deshalb habe ich vorgeschlagen, diese Implementierung in den MQL5-Standard aufzunehmen.