Urain: Наверно нужно как то гарантированно проверить. Вот только пока не знаю как.
если логически рассуждать, то закрытие хендла приводит к освобождению данной области памяти.
но это ведь не означает, что закрытие хендла должно очищать эту область на ноль. Хендл закрыли, записанные данные остались до момента их перезаписи другим софтом. как то так.
sergeev: если вы используете файлы для хранения промежуточных данных, то конечно можно. Главное сбрасывать данные на диск в каких то реперных точках, а то если что случится, то инфа ведь потеряется безвозвратно.
Если "что то случится", то актуальная инфа потеряется в любом случае. А промежуточные результаты, да, можно периодически сбрасывать в файл на жд.
если логически рассуждать, то закрытие хендла приводит к освобождению данной области памяти.
но это ведь не означает, что закрытие хендла должно очищать эту область на ноль. Хендл закрыли, записанные данные остались до момента их перезаписи другим софтом. как то так.
Файл закрыт хендл уничтожен, открываем файл с тем же именем и читаем нужную инфу, хотя по идее распределённая область должна терятся и открытие уничтоженного файла без создания должно вызывать ошибку. Вот не знаю баг это или фича.
#include <MemMapLib.mqh>//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
CMemMapFile *hmem=new CMemMapFile();
int err=hmem.Open("Local\\test",111,modeCreate);// создаём файлuchar data[];
int sizedata=StringToCharArray("Hello from MQL5!",data);
err=hmem.Write(data,sizedata); // пишимArrayInitialize(data,0);
CMemMapFile hm;
err=hm.Open("Local\\test",111); // открываем файл, без соданияuchar nextdata[];
hm.Seek(0,SEEK_SET);
err=hm.Read(nextdata,sizedata); // читаемPrint(CharArrayToString(nextdata));
ArrayInitialize(data,0);
err=hmem.Open("Local\\test",111); // открываем файл, без содания
hmem.Seek(0,SEEK_SET);
err=hmem.Read(data,sizedata); // читаемPrint("до ",CharArrayToString(data));
hmem.Close(); delete hmem; // закрываем файл
hm.Close(); // закрываем файлArrayInitialize(data,0);
err=hm.Open("Local\\test",111);Print("err=",err);
hm.Seek(0,SEEK_SET);
err=hm.Read(data,sizedata);
Print("после ",CharArrayToString(data));
}
//+------------------------------------------------------------------+
Нужно найти такую API функцию - из любого API, в том числе и не виндового - при которой не получится использовать memcpy/strcpy
то есть найти такой случай, когда по каким то причинам не будет известен размер возвращаемого указателя, или возвращаемая строка будет не NULL-terminated и без известного рамера.
Помогите пожалуйста отыскать границы применения этого метода...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Наверно нужно как то гарантированно проверить. Вот только пока не знаю как.
если логически рассуждать, то закрытие хендла приводит к освобождению данной области памяти.
но это ведь не означает, что закрытие хендла должно очищать эту область на ноль. Хендл закрыли, записанные данные остались до момента их перезаписи другим софтом. как то так.
если вы используете файлы для хранения промежуточных данных, то конечно можно. Главное сбрасывать данные на диск в каких то реперных точках, а то если что случится, то инфа ведь потеряется безвозвратно.
если логически рассуждать, то закрытие хендла приводит к освобождению данной области памяти.
но это ведь не означает, что закрытие хендла должно очищать эту область на ноль. Хендл закрыли, записанные данные остались до момента их перезаписи другим софтом. как то так.
Файл закрыт хендл уничтожен, открываем файл с тем же именем и читаем нужную инфу, хотя по идее распределённая область должна терятся и открытие уничтоженного файла без создания должно вызывать ошибку. Вот не знаю баг это или фича.
хотя по идее распределённая область должна терятся и открытие уничтоженного файла без создания должно вызывать ошибку.
думаю фича.
фича в том, что имя файла в памяти такое есть. И его система обнаруживает.
Народ, есть просьба.
Нужно найти такую API функцию - из любого API, в том числе и не виндового - при которой не получится использовать memcpy/strcpy
то есть найти такой случай, когда по каким то причинам не будет известен размер возвращаемого указателя, или возвращаемая строка будет не NULL-terminated и без известного рамера.
Помогите пожалуйста отыскать границы применения этого метода...
MT5 642 Win7 64 не работает, насколько я понял то после
hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // создаем объект памяти
получается ошибка 1400,
а Vista 32 работает.
проверил, у меня тоже ошибка. Но =6.
проверил, у меня тоже ошибка. Но =6.
Это наверно фишка какая то. При при прямом запуске дает err=6, а в режиме отладки err=1400.
А как передовать int или double массивы? А то у меня не палучается :(