Es ist erstaunlich, wie dieser Trick überhaupt für jemanden funktioniert hat. Mit solchen Pannen im Inneren... Unten ist ein Fragment von CMemMapApi::Write() ArrayResize(src, size); memcpyX(src, view, size); // nahm den Bytebuffer for(int i=0; i
Leider hat das FileMapping einen entscheidenden Nachteil. Wenn die untergeordnete Anwendung (die Daten liest) ihre Arbeit aus irgendeinem Grund nicht korrekt beendet hat ( Aufrufe kernel32 ::UnmapViewOfFile und kernel32::CloseHandle) , bleibt die "Datei" im Speicher hängen, bis alle Prozesse, von denen aus sie geöffnet wurde, geschlossen sind ( Aufrufe kernel32::OpenFileMappingW und kernel32::MapViewOfFile). Insbesondere kann man seine Größe nicht ändern, sondern muss ihn erneut öffnen (schließen und erneut öffnen).
Ichhabe keine Lösung für dieses Problemgefunden. Es ist schwer, mit dieser Bibliothek in eine solche Situation zu geraten, da jede Aktion mit dem Öffnen beginnt und mit dem Schließen endet. Deshalb ist sie auch so langsam. Aber Sie können trotzdem auf diesen Fehler stoßen. Und dann wird das MQL-Programm mit dieser Meldung abstürzen.
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
Ich versuche, die Funktion dieses Beispiels zu überprüfen https://www.mql5.com/de/code/818
Ich verwende MT5 Version: 5.00 build 5370 17 Oct 2025.
Aus irgendeinem Grund bekomme ich Fehler, wenn ich versuche, die Datei memmap.mq5 zu kompilieren:
memmap.mq5
MemMapLib.mqh
wrong parameters count, 4 passed, but 3 requires MemMapLib.mqh 2799
long CMemMapFile::Open(string,int,int) MemMapLib.mqh 25119
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding MemMapLib.mqh 2799
see declaration of function 'CMemMapFile::Open' MemMapLib.mqh 25119
see declaration of function 'CMemMapApi::Open' MemMapLib.mqh 12219
wrong parameters count, 3 passed, but 1 requires MemMapLib.mqh 2929int CMemMapFile::Fill(uchar) MemMapLib.mqh 25314
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding MemMapLib.mqh 2929
see declaration of function 'CMemMapFile::Fill' MemMapLib.mqh 25314
see declaration of function 'CMemMapApi::Fill' MemMapLib.mqh 12414
wrong parameters count, 4 passed, but 1 requires MemMapLib.mqh 29916int CMemMapFile::Grows(int) MemMapLib.mqh 25514
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding MemMapLib.mqh 29916
see declaration of function 'CMemMapFile::Grows' MemMapLib.mqh 25514
see declaration of function 'CMemMapApi::Grows' MemMapLib.mqh 125193 errors, 3 warnings 33
Kann mir jemand sagen, was ich falsch mache? Und wie ich es beheben kann?
fxsaber #: Die Bibliotheksquellen entsprechen nicht den aktuellen Anforderungen der Sprache MQL5.
Gibt es eine Möglichkeit, dies zu korrigieren? Oder ist es notwendig, alle Quellen zu überarbeiten und es ist unmöglich, dies ohne den Autor zu tun? Ich glaube, der Compiler hat hier nur 3 Fehler erzeugt. Es wäre großartig, wenn dies korrigiert werden könnte.
Gibt es eine Möglichkeit, dies zu beheben? Oder ist es notwendig, alle Quellen zu überarbeiten und es ist unmöglich, dies ohne den Autor zu tun? Ich glaube, der Compiler hat hier nur 3 Fehler angezeigt. Es wäre toll, wenn es korrigiert werden könnte.
Und hier habe ich den Code bereits selbst korrigiert. Wer ihn braucht, kann ihn verwenden. Der Expert Advisor kompiliert damit erfolgreich.
Ich habe dies ab Zeile 251 hinzugefügt:
using CMemMapApi::Open;
using CMemMapApi::Close;
using CMemMapApi::Fill;
using CMemMapApi::Grows;
using CMemMapApi::Write;
using CMemMapApi::Read;
Es mussten große Datenmengen (Gigabytes) übertragen werden. Die Implementierung durch diese Bibliothek zeigte leider eine extrem niedrige Leistung.
Ich musste es mit dem ursprünglichen DLL-Satz komplett neu machen. Es funktionierte schnell.
Leider hat das FileMapping einen entscheidenden Nachteil. Wenn die untergeordnete Anwendung (die Daten liest) ihre Arbeit aus irgendeinem Grund nicht korrekt beendet hat ( Aufrufe kernel32 ::UnmapViewOfFile und kernel32::CloseHandle) , bleibt die "Datei" im Speicher hängen, bis alle Prozesse, von denen aus sie geöffnet wurde, geschlossen sind ( Aufrufe kernel32::OpenFileMappingW und kernel32::MapViewOfFile). Insbesondere kann man seine Größe nicht ändern, sondern muss ihn erneut öffnen (schließen und erneut öffnen).
Ichhabe keine Lösung für dieses Problemgefunden. Es ist schwer, mit dieser Bibliothek in eine solche Situation zu geraten, da jede Aktion mit dem Öffnen beginnt und mit dem Schließen endet. Deshalb ist sie auch so langsam. Aber Sie können trotzdem auf diesen Fehler stoßen. Und dann wird das MQL-Programm mit dieser Meldung abstürzen.
Aus irgendeinem Grund bekomme ich Fehler, wenn ich versuche, die Datei memmap.mq5 zu kompilieren:
Kann mir jemand sagen, was ich falsch mache? Und wie ich es beheben kann?
Die Bibliotheksquellen entsprechen nicht den aktuellen Anforderungen der Sprache MQL5.
Gibt es eine Möglichkeit, dies zu korrigieren? Oder ist es notwendig, alle Quellen zu überarbeiten und es ist unmöglich, dies ohne den Autor zu tun? Ich glaube, der Compiler hat hier nur 3 Fehler erzeugt. Es wäre großartig, wenn dies korrigiert werden könnte.
Gibt es eine Möglichkeit, dies zu beheben? Oder ist es notwendig, alle Quellen zu überarbeiten und es ist unmöglich, dies ohne den Autor zu tun? Ich glaube, der Compiler hat hier nur 3 Fehler angezeigt. Es wäre toll, wenn es korrigiert werden könnte.
Und hier habe ich den Code bereits selbst korrigiert. Wer ihn braucht, kann ihn verwenden. Der Expert Advisor kompiliert damit erfolgreich.
Ich habe dies ab Zeile 251 hinzugefügt: