Может кому пригодится:
Как альтернатива можно сделать RAM диск и размещать там файлы. Ram диск это виртуальных диск, расположенный в оперативной памяти компьютера.
Я использую такое ПО для создания Ram-диска http://ramdisk.nm.ru/ramdiskent-rus.htm
Вот бы это всё в MQL зашить, чтоб без dll можно было юзать.
Спасибо Alex, классная штука.
Вот бы это всё в MQL зашить, чтоб без dll можно было юзать.
к сожалению вся проблема в одной единственной функции - MapViewOfFile. она возвращает указатель. Поэтому в MQL напрямую её не поиспользуешь... указатель к массиву не приведешь.
Все остальные функции (их всего 4 -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) вызывать можно.
но вот только эта MapViewOfFile не дала возможности создать полнофункциональную работу из MQL с маппингом напрямую. а жаль, сам тоже очень хотел без самописной DLL сделать.
к сожалению вся проблема в одной единственной функции - MapViewOfFile. она возвращает указатель. Поэтому в MQL напрямую её не поиспользуешь... указатель к массиву не приведешь.
Все остальные функции (их всего 4 -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) вызывать можно.
но вот только эта MapViewOfFile не дала возможности создать полнофункциональную работу из MQL с маппингом напрямую. а жаль, сам тоже очень хотел без самописной DLL сделать.
Да собственно это камень не в тебя, посыл был разработчикам MQ, проблема давняя и её решение явно востребовано.
ЗЫ Я для похожих целей (но внутри одного МТ) писал функции передачи указателей на массив через событие, но без dll тоже не получилось, хотя функции в dll были одно строчные.
Да собственно это камень не в тебя, посыл был разработчикам MQ, проблема давняя и её решение явно востребовано.
о да, что надо, то надо.
а ты вообще делал как нибудь, чтоб создать функцию преобразователь
например какая-то dll функция возвращает указатель, то есть имеем int(4). В большинстве случаев это будет указатель на некоторую структуру.
И дальнейшая задача - вытянуть данные из этой структуры. Размер структуры нам известен, значит этот указатель можно будет сначала перевести на указатель на char массив.
вот вопрос - как такое переприсвоение сделать? как обмануть ? может через промежуточную dll функцию, в которую передавать указатель, а она будет возвращать этот самый char массив ?
Ну а далее этот char массив простым = переводим в нашу структуру.
вот как вариант такая функция в dll
void Convert(char *_in, char *_out) { _out=_in; }
и она вызывается из mql так
// например функция из апи вернула указатель на структуру данных int ptr=ФункцияИзАпи(); // указатель на ДанныеИзАпи struct ДанныеИзАпи { // структура данных из апи размером 16 байт }; struct refData { char byte[16]; // образ этой же структуры, тоже = 16 байтам }; refData ref; Convert(ptr, ref.byte); // перевели указатель на массив ДанныеИзАпи data=ref; // заполнили поля структуры простым копированием
PS
Хотя пришла идея с memcpy. Она ведь тоже копирует по указателю. надо попробовать сейчас.
Еще один камень в огород МК.
К чему такие заморочки?
Неужели свои же программы могут испортить фейс?
Да собственно это камень не в тебя, посыл был разработчикам MQ, проблема давняя и её решение явно востребовано.
вобщем все гуд, проблему эту решил, библа для MQL5 без использования самописной DLL успешно сделана и проверена.
на публикацию уже отправил :)
Еще один камень в огород МК.
К чему такие заморочки?
Неужели свои же программы могут испортить фейс?
Программы MQ5/EX5 очень легко распространяются и без жесткого контроля за безопасностью могут нанести пользователям непоправимый ущерб.
Именно поэтому прикладной язык MQL5 создан защищенным, без возможности вызывать опасные функции и работающим в собственной песочнице. Для расширения функционала есть интеграция с DLL библиотеками.
Программы MQ5/EX5 очень легко распространяются и без жесткого контроля за безопасностью могут нанести пользователям непоправимый ущерб.
Именно поэтому прикладной язык MQL5 создан защищенным, без возможности вызывать опасные функции и работающим в собственной песочнице. Для расширения функционала есть интеграция с DLL библиотеками.
А как жешь Маркет?
или в марткете win dll будут разрешены?
в общем я знаю ответ, поэтому и предложил сделать данную реализацию в стандарте MQL5.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Memory Mapping:
DLL (проект VC++ 2010) для работы с Memory Mapping.
Функции DLL позволяют:
Примеры использования DLL в МetaТrader 5 - Мониторинг котировок (пример для маппинга)
Автор: Alex Sergeev