Для сторонников простых решений сделал бы так:
#include <SharedMemoryMT4.mqh> // Заголовочный файл библиотеки "SharedMemoryMT4.dll". string sNameMemory = "MyMem"; int aiOutArray[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int aiIncArray[10] = {0}; MemoryWriteIntArray(0, "", -1, sNameMemory, 0, aiOutArray, ArraySize(aiOutArray), 0, ArraySize(aiOutArray)); MemoryReadIntArray(0, "", -1, sNameMemory, 0, aiIncArray, ArraySize(aiIncArray), 0, ArraySize(aiIncArray));
Так тоже можно (ошибки не будет):
#include <SharedMemoryMT4.mqh> // Заголовочный файл библиотеки "SharedMemoryMT4.dll". string sNameMemory = "MyMem"; int aiOutArray[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int aiIncArray[10] = {0}; MemoryReadIntArray(0, "", -1, sNameMemory, 0, aiIncArray, ArraySize(aiIncArray), 0, ArraySize(aiIncArray)); MemoryWriteIntArray(0, "", -1, sNameMemory, 0, aiOutArray, ArraySize(aiOutArray), 0, ArraySize(aiOutArray));
Благодарю!
К сожалению не работает функция проверки существования выделенной памяти по имени почему-то.
Также небольшой недостаток что можно записывать только один массив, а нужно два, время и цена, хотя можно их в один поместить, что не удобно.
//-------------------------------------------------------------------- #property indicator_chart_window //-------------------------------------------------------------------- #include <SharedMemoryMT4.mqh> string sNameMemory = "MyMem"; int aiOutArray[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 195}; //-------------------------------------------------------------------- int init(){ Alert("init"); bool i; i=MemoryCheckName(0, "", sNameMemory); Alert(i); MemoryClear(0, "", -1, sNameMemory); i=MemoryCheckName(0, "", sNameMemory); Alert(i); } //-------------------------------------------------------------------- int start(){ } //--------------------------------------------------------------------
Алерт выдает единицы.
Имеем код на базе этого примера https://www.mql5.com/ru/code/10571
Нужно записать и считать массив, но не работает...
что именно не работает? какие ошибки? на какой строке не работает? где журнал, отчет багов?
Не работает запись и считывание data[3].
код ошибки какой? что возвращает Write? что возвращает Read?
код ошибки какой? что возвращает Write? что возвращает Read?
Благодарю!
К сожалению не работает функция проверки существования выделенной памяти по имени почему-то.
Также небольшой недостаток что можно записывать только один массив, а нужно два, время и цена, хотя можно их в один поместить, что не удобно.
Алерт выдает единицы.
Функция проверки существования выделенной памяти Вам не пригодится. Зачем? Можете читать до записи. Всё само выделится сколько надо.
Да и работать она у Вас не будет. Вам доступно только одно имя в каждом пространтстве имён.
Записывать можно сколько угодно массивов. Пишите следующий с нового адреса.
Функция проверки существования выделенной памяти Вам не пригодится. Зачем? Можете читать до записи. Всё само выделится сколько надо.
Да и работать она у Вас не будет. Вам доступно только одно имя в каждом пространтстве имён.
Записывать можно сколько угодно массивов. Пишите следующий с нового адреса.
А как проверить что массив уже находится в памяти? Например, я хочу сохранить данные во внешней памяти когда делаю перекомпиляцию чтобы потом не инициализировать их заново.
Что значит писать с нового адреса? Пробовал записать другой массив в то же пространство имени, но это не работает.
А как проверить что массив уже находится в памяти? Что значит писать с нового адреса? Пробовал записать другой массив в то же пространство имени, но это не работает.
Чтобы проверить надо его прочитать. Разве есть другой способ?
Вот запись 2-х массивов:
#include <SharedMemoryMT4.mqh> // Заголовочный файл библиотеки "SharedMemoryMT4.dll". string sNameMemory = "MyMem"; int aiOutArray1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int aiOutArray2[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int aiIncArray1[10] = {0}; int aiIncArray2[10] = {0}; MemoryWriteIntArray(0, "", -1, sNameMemory, 0, aiOutArray1, ArraySize(aiOutArray1), 0, ArraySize(aiOutArray1)); MemoryWriteIntArray(0, "", -1, sNameMemory, 4 * ArraySize(aiOutArray1), aiOutArray2, ArraySize(aiOutArray2), 0, ArraySize(aiOutArray2)); MemoryReadIntArray(0, "", -1, sNameMemory, 0, aiIncArray1, ArraySize(aiIncArray1), 0, ArraySize(aiIncArray1)); MemoryReadIntArray(0, "", -1, sNameMemory, 4 * ArraySize(aiIncArray1), aiIncArray2, ArraySize(aiIncArray2), 0, ArraySize(aiIncArray2));
Всё же, проще в тестовый скрипт с примерами заглянуть.
Для начала проверить работоспособность компа тестовым скриптом. Там есть видео. Если не работает, то МТ4 стоит на системном диске и/или прав недостаточно.
err[0] равно 0 в обеих случаях. Write возвращает 0, а Read возвращает 12.
Андрей, как вы можете читать 3 числа, но при этом пытаться вывести на экран четвертое?
вам не кажется что это не логично?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Имеем код на базе этого примера https://www.mql5.com/ru/code/10571
Нужно записать и считать массив, но не работает... Как исправить?