Bibliotheken: Abbildungsdateien ohne DLL - Seite 7

 
o_O:

lib ist nicht an Abschnitte gebunden, da der Code theoretisch in verschiedenen Prozessen ausgeführt werden kann.

Um ihn zu steuern, verwenden Sie entweder Ihre Variante oder zum Beispiel https://www.mql5.com/de/code/1835.

Habe ich richtig verstanden, dass ich, wenn eine Mutex benannt ist, ihr Handle von jedem Prozess erhalten kann, nicht nur von metatrader?
 
Al_key:
Habe ich richtig verstanden, dass ich, wenn die Mutex benannt ist, ihr Handle von jedem Prozess erhalten kann, nicht nur von Metatrader?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686931%28v=vs.85%29.aspx hat die Antwort selbst gefunden. In der Tat können sie zwischen Prozessen geteilt werden.
 

Frage an den Autor.

Ich benutze die Klasse in mt4. Wenn ich das Terminal ausschalte und wieder einschalte, funktioniert alles nicht mehr. Der Ausweg ist nicht sehr bequem, Expert Advisors vor dem Ausschalten zu löschen und sie nach dem Einschalten des Terminals wieder anzuhängen. Gibt es eine Möglichkeit, dieses Problem zu umgehen.

Und das zweite. Ich kann die Dateizuordnung, die von einem in Delphi geschriebenen Programm erstellt wurde, nicht lesen. Was können die Nuancen sein.

Kurz gesagt, es handelt sich um Trading-Panels, die auf vielen Terminals arbeiten.

 
Dmitry Luck'janenko:


Wenn Sie das Terminal ausschalten und wieder einschalten, funktioniert alles nicht mehr. Der Ausweg ist nicht sehr bequem, EAs vor dem Ausschalten zu löschen und sie nach dem Einschalten des Terminals wieder anzuhängen. Gibt es eine Möglichkeit, dieses Problem zu umgehen?

Es ist notwendig, zu protokollieren und zu sehen, was mit den Dateien während einer solchen Deinitialisierung passiert. es gibt keine Sperren.

Ich kann die Dateizuordnung nicht lesen

Welche Funktion der Winapi ist mit "lesen" gemeint?

 
o_O:

Es ist notwendig, zu protokollieren und zu sehen, was mit den Dateien während einer solchen Deinitialisierung geschieht. es gibt keine Sperren.

Welche Funktion von winapi ist mit "lesen" gemeint?

Die Sache ist die, dass die Funktion

HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen)

gibt immer 0 zurück.


Deshalb kann ich nicht wirklich verstehen, ob die Datei geöffnet ist.

In der Abbildung oben ist das Protokoll des Expert Advisors, der eine Dateizuordnung öffnet, die noch nicht erstellt worden ist. Und es gibt keine Fehler.

Vielleicht sollte die Funktion

CMemMapFile::Open

nicht in int OnInit() eingefügt werden, sondern irgendwo weiter hinten, z.B. in OnTick(), aber da der zurückgegebene Handle immer 0 ist, gibt es keine Möglichkeit, eine Prüfung vorzunehmen, um zu vermeiden, dass die Datei ständig bei jedem Tick geöffnet wird.

Und zur zweiten Frage.

In Delphi erstelle ich eine Anwendung, die eine Dateizuordnung erstellt. Beim Verbinden damit treten Fehler auf. Nämlich nicht korrekt übergebene Zahlen. Ich habe angefangen mit {$Align Off} auszurichten.

Ich bekam andere Fehler wie Access violation read to 0x04E91000 in 'msvcrt.dll'.

Jetzt sind die Daten normal um 19 Bytes ausgerichtet - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5: OnInitsizeof(PipeData)= 19".


aber beim Lesen sind alle Daten Null.

 
Dmitry Luck'janenko:

Das Problem ist, dass die Funktion

immer 0 zurückgibt.

Deshalb kann ich nicht wirklich verstehen, ob die Datei geöffnet ist.

Das ist richtig, CMemMapFile::Open gibt einen Fehlercode oder 0 zurück, wenn kein Fehler vorliegt.

(im Gegensatz zu CMemMapApi:, das ein offenes Handle zurückgibt und den Fehler in den übergebenen Parameter schreibt).

Und das Handle befindet sich in m_hmem.



In Delphi erstellen Sie eine Anwendung, die eine Dateiabbildung erstellt. Beim Verbinden der Anwendung treten Fehler auf. Nämlich nicht korrekt übergebene Zahlen.

Berücksichtigen Sie die reservierten DWORD-Bytes am Anfang der Datei?
 
o_O:


Berücksichtigen Sie die reservierten DWORD-Bytes am Anfang der Datei?
4 Bytes? ich werde es versuchen, ich habe es nicht getan.
 
Dmitry Luck'janenko:
4 Bytes? ich werde es versuchen, ich habe es nicht gezählt.

Sehen Sie sich an, wie die Datei im Quelltext geschrieben oder erstellt wird.

zum Parameter m_size

 
o_O:

korrekt ist, gibt CMemMapFile::Open einen Fehlercode oder 0 zurück, wenn kein Fehler aufgetreten ist.

(im Gegensatz zu CMemMapApi:, das ein Open-Handle zurückgibt und den Fehler in den übergebenen Parameter schreibt).

Und das Handle befindet sich in m_hmem.


Berücksichtigen Sie die reservierten DWORD-Bytes am Anfang der Datei?
2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592


ist m_hmem beim Öffnen einer nicht existierenden Dateizuordnung. Wie kann ich feststellen, ob dies ein Fehler oder ein Handle ist?

 
Dmitry Luck'janenko:

ist m_hmem beim Öffnen einer nicht existierenden Dateizuordnung. Wie kann man feststellen, ob es ein Fehler oder ein Handle ist?

Ich habe geschrieben, dass CMemMapFile::Open einen Fehlercode oder 0 zurückgibt, wenn es keinen Fehler gibt.