Bibliotheken: Abbildungsdateien ohne DLL - Seite 10

 
o_o:

Zumindest versuchen Sie nicht, eine Datei im Speicher zu lesen, nachdem Sie den Computer neu gestartet haben...


Ich verstehe also, dass ich auf diese Weise keine Daten zwischen zwei Terminals durch den Speicher übertragen kann?

Und was ist der richtige Weg? Ich muss die Übertragung eines Textstrings von einem Terminal zum anderen mit MemMapLib.mqh implementieren .

 
Иван:

Ich verstehe also, dass ich auf diese Weise keine Daten über den Speicher zwischen zwei Terminals übertragen kann?

Sie können

Sie müssen die Übertragung einer Textzeile von einem Terminal zum anderen mit MemMapLib.mqh implementieren .

eine Datei erstellen, sie schreiben und dann lesen.

ungefähr in dieser Reihenfolge

https://www.mql5.com/de/code/10571

 
        CMemMapFile hmem;
        long err=hmem.Open("Local\\test",111,modeCreate);

Wie groß ist die maximale Datenmenge, die ich in eine geöffnete Datei im Speicher schreiben und dann lesen kann?

Nach 4096 stürzt der Expert Advisor an diesem Punkt ab.

 
Geben Sie mir den Code und den Ausdruck
[Gelöscht]  
HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen) 
{ 
m_size=size; m_path=path; m_mode=mode; m_pos=0; // начальное положение 
if (m_path=="") return(-1); 
m_hmem=Open(m_path, size, mode, err); 
if (m_hmem==NULL) return(err); // если ошибка создания 
return(0); 
} 

Hallo, im obigen Code sollte "return(0)" in "return(m_hmem)" korrigiert werden, sonst wird das Handle der Memory-Mapped-Datei nicht zurückgegeben.

 

Ich habe versucht, eine 200 Zeichen lange Zeichenkette in eine Datei zu schreiben und erhielt eine Fehlermeldung wegen Überschreitung der Array-Größe in Zeile 214 der Bibliothek. Es stellte sich heraus, dass die Größe des Headers bei der Bestimmung der Größe des empfangenden Arrays nicht berücksichtigt wird.

 
Алексей Барбашин:

Es klappt.

Funktioniert nicht.

Geben Sie mir den Code und die Spindel

 
o_o:

Es funktioniert nicht.

Geben Sie mir den Code und den Ausdruck


   string control_text = "Unsere Mutti weint laut, weil alle so viel essen. Sei still, Mutti, weine nicht! Die anderen haben die gleiche Scheiße...";
   string NAME_MAPPING = "Local\\" + Symbol() + "_" + (string)ChartID();
        
   uchar Data_sender[];
   int size_data = StringToCharArray(control_text, Data_sender);

  //--- Erstellen eines Speicherobjekts
   CMemMapFile* MappingFile = new CMemMapFile();
  //--- Erstellen einer Datei für die Aufzeichnung
   long err = MappingFile.Open(NAME_MAPPING, size_data+4, modeCreate);
        
  //--- Daten in Datei schreiben
   err = MappingFile.Write(Data_sender, size_data);
        
  //--- Den Datensatz schließen
   MappingFile.Close();
  //--- Löschen des Zeigers
   delete MappingFile;
   
   uchar Data_receiver[];
   ArrayResize(Data_receiver, size_data);
   
   //--- Erstellen eines Speicherobjekts
   CMemMapFile* MF = new CMemMapFile();
   //--- Öffnen Sie die Datei zum Lesen
   err = MF.Open(NAME_MAPPING, size_data+4, modeOpen);
   //--- Сдвигаем указатель чтения на начало файла
   MF.Seek(0,SEEK_SET);
   //--- Читаем данные из файла
   err=MF.Read(Data_receiver, size_data);
   //--- Schließen Sie die Datei 
   MF.Close();
  //--- Löschen des Zeigers
   delete MF;

   Print(CharArrayToString(Data_receiver));

Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und die Ausgabe war still. Wo liegt der Fehler?

 
Алексей Барбашин:

Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und bekam Schweigen in der Ausgabe. Wo liegt der Fehler?

//--- Den Datensatz schließen

Es heißt nicht "Schließen eines Datensatzes", sondern "Schließen und Löschen einer Datei ".

Das ist der Grund

//--- Öffnen Sie die Datei zum Lesen
Sie versuchen, etwas zu öffnen, das nicht existiert.
 
o_o:

Es heißt nicht "Schließen des Datensatzes", sondern "Schließen und Löschen der Datei ".

Das ist der Grund

Sie versuchen, etwas zu öffnen, das nicht existiert.

Okay, das macht Sinn. Ich bin der Analogie zur Arbeit mit normalen Dateien gefolgt, wo das Schließen genau zum Schließen und Freigeben führt, nicht zum Löschen der Datei.