Попытался записать записать в файл строку длиной 200 символов, получил ошибку выхода за размерность массива в строке 214 библиотеки. Получается что при определении размера принимающего массива не учитывается размер заголовка.
string control_text = "Наша мама громко плачет, потому-что все свинячат. Тише мамочка, не плач! У других такой же срач...";
string NAME_MAPPING = "Local\\" + Symbol() + "_" + (string)ChartID();
uchar Data_sender[];
int size_data = StringToCharArray(control_text, Data_sender);
//--- Создаем объект работы с памятью
CMemMapFile* MappingFile = new CMemMapFile();
//--- Создаем файл для записи long err = MappingFile.Open(NAME_MAPPING, size_data+4, modeCreate);
//--- Записываем данные в файл
err = MappingFile.Write(Data_sender, size_data);
//--- Закрываем запись
MappingFile.Close();
//--- Удаляем указатель delete MappingFile;
uchar Data_receiver[];
ArrayResize(Data_receiver, size_data);
//--- Создаем объект работы с памятью
CMemMapFile* MF = new CMemMapFile();
//--- Открываем файл на чтение
err = MF.Open(NAME_MAPPING, size_data+4, modeOpen);
//--- Сдвигаем указатель чтения на начало файла
MF.Seek(0,SEEK_SET);
//--- Читаем данные из файла
err=MF.Read(Data_receiver, size_data);
//--- Закрываем файл
MF.Close();
//--- Удаляем указатель delete MF;
Print(CharArrayToString(Data_receiver));
С размерами разобрался. Но попытался прочитать файл другим объектом и получил на выходе тишину. Где ошибка?
это называется не закрываем запись, а закрываем и удаляем файл .
поэтому
вы пытаетесь открывать то, чего уже нет.
Такс, тогда становится понятным. Я поступал по аналогии работы с обычными файлами, когда закрытие приводит именно к закрытию и освобождению, а не удалению файла.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Хорошо хоть не пробуете прочитать файл в памяти после перезапуска компьютера...
Ну то есть я понял, что мне таким образом не удастся передавать данные через память между двумя терминалами?
А какой путь будет корректным? Нужно реализовать передачу строки текста из одного терминала в другой с помощью MemMapLib.mqh.
Ну то есть я понял, что мне таким образом не удастся передавать данные через память между двумя терминалами?
удастся
Нужно реализовать передачу строки текста из одного терминала в другой с помощью MemMapLib.mqh.
создаете файл, записываете, потом читаете
примерно в таком порядке
https://www.mql5.com/ru/code/10571
Какой максимальный объём данных я смогу записать в открытый файл в памяти и затем считать?
У меня после 4096 начинает валиться эксперт на этом месте.
Привет, в приведенном выше коде "return(0)" нужно исправить на "return(m_hmem)", иначе не будет возвращаться хэндл файла, отображенного в памяти.
Попытался записать записать в файл строку длиной 200 символов, получил ошибку выхода за размерность массива в строке 214 библиотеки. Получается что при определении размера принимающего массива не учитывается размер заголовка.
Получается <..>
не получается.
Код и распринтовку приведите
не получается.
Код и распринтовку приведите
С размерами разобрался. Но попытался прочитать файл другим объектом и получил на выходе тишину. Где ошибка?
С размерами разобрался. Но попытался прочитать файл другим объектом и получил на выходе тишину. Где ошибка?
//--- Закрываем записьэто называется не закрываем запись, а закрываем и удаляем файл .
поэтому
//--- Открываем файл на чтениевы пытаетесь открывать то, чего уже нет.это называется не закрываем запись, а закрываем и удаляем файл .
поэтому
вы пытаетесь открывать то, чего уже нет.Такс, тогда становится понятным. Я поступал по аналогии работы с обычными файлами, когда закрытие приводит именно к закрытию и освобождению, а не удалению файла.