Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 4

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
MT5 build 240. Вызов dll разрешён.
А что это за сообщение такое у меня "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. Вызов dll разрешён.
4. Перехват исключений в DLL функциях
Чтобы избежать падения самого терминала, каждый вызов функций DLL автоматически защищается оберткой Unhandled Exception. Этот механизм позволяет уберечься от большинства стандартных ошибок (обращения в недоступную память, деления на ноль и т.д.)
Для проверки работоспособности этого механизма создадим следующий код:
и вызовем его из терминала:
В результате произойдет попытка записи в нулевой адрес с генерацией исключения. Терминал его перехватит, сообщит в журнале и продолжит работу:
Из статьи демонстрационный пример:
Спасибо. Значит, я был не очень внимателен, когда читал статью. :)
PS А мог бы сказать типа: "Слушай, товарисч! Иди перечитай статью заново!" - и был бы прав. Респект и уважуха, как говорится.
Уважаемый pisara,
Давайте уточним - идет спор теоретика с практиком.
Не переходя на личности, по существу. Хороший теоретик отталкивается от практически накопленного опыта, хороший практик же меряет семь раз.
За "мир во всем мире" конечно биться Вам никто не запрещает, но учитывайте побольше факторов кроме "а почему бы не улучшить?".
Я так и написал - не будете его использовать, ибо не хотите заниматься рутиной. Вам ведь на блюдечке все надо будет дать - все индикаторы, все рыночное окружение, всю историю в разных периодах и тд. И чартинг надо бы, не в уме же Вы будете индикаторами манипулировать?
То есть, Вам фактически нужен полноценный терминал. И мы его даем: MetaTrader 5 + MQL5 + DLL. Называйте его фреймворком или скажите сразу - отдайте терминал в исходниках/компонентах (ведь по сути этого требуете).
Здесь не миротворческая деятельность, но, согласитесь, облегчение жизни программера и улучшение качества торговой системы + возможности её интеграции ещё никому не вредили. За примерами не далеко: Borland Delphi, MS .net имеют полностью открытый фреймворк / компонентную базу / class diagramms и даже значительную для пользователей платформы часть исходников (Delphi).
Программисты ошибочно считают "мощью" возможность писать скрипты для торговых систем на незащищенных нативных языках, а потом удивляются от того, что никто даже не собирается пользоваться их творениями. Поэтому они умирают едва родившись. Те же, кто развил и создал сообщество пользователей, думают гораздо глубже (ибо набили шишек раньше) и не допускают таких ошибок.
Давайте быть реалистами. Если вы хотите выпустить софт и продать его, через полгода или год выпустить платный апдейт, то для вас защита кода весьма важна. Если же вы, как я понимаю, здесь надолго и непрерывно усовершенствуете платформу цепью билдов и поддержки, то никакой конкурент вас не достанет. Зато пользователи смогут писать куда более качественный код. И не только код, но и структуру ТС, что не менее важно! Могу даже привести аналогию с антивирусниками - взлом AV клиента ещё не даёт доступа к апдейту базы вирусов (тут - квот).
Контролируемый (по умолчанию отключенный) вызов DLL - это приемлемо, но вот загрузить непонятно кем сделанные DLL к себе в торговый терминал - это дыра похлеще непатченного интернет эксплорера 6.
Так дыра то эта - просто разрешение пользователя! Как бедолага пользователь может гарантировать 100%-но отсутствие вредностей в DLL, пусть она подписана хоть компанией Х? Ведь запретив в сомнении, он никогда не узнает была бы от неё ему польза или нет. Вот тут вам и психология...
Для информации статистика Google Trends по торговым терминалам с автоматизацией:
Интересно, а шкала ординат там логарифмическая?

Кстати, данные для размышления по России, видно лидерство красного Метастока:
Пользуйтесь штатными функциями "Ответить", пожалуйста. Очень неудобно читать.
Чтобы разорвать цитируемый блок, поставьте курсор в нужное место и выберите стиль "Обычный текст" или нажмите Ctrl+1.
Вообще рекомендую заканчивать с такими советами - они в корне убийственны, базируются на неверных предпосылках и не подходят для прикладного языка.
В качестве шутки есть старый анекдот:
Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.
Прохожий подходит к еврею, кидает рубль и говорит:
— Слушай, смени надпись, иначе останешься голодным.
Когда прохожий ушёл, еврей повернулся к своему соседу и сказал:
— Ты понял, Изя? Этот человек будет учить нас коммерции!
Пользуйтесь штатными функциями "Ответить", пожалуйста. Очень неудобно читать.
Чтобы разорвать цитируемый блок, поставьте курсор в нужное место и выберите стиль "Обычный текст" или нажмите Ctrl+1.
Вообще рекомендую заканчивать с такими советами - они в корне убийственны, базируются на неверных предпосылках и не подходят для прикладного языка.
В качестве шутки есть старый анекдот:
Ладно, если не хотите выдать действительных причин убийственности предпосылок и чем вам .net фреймворк тесен, дискуссия окончена. По поводу анекдота - отмеряйте сами, монастырь ваш.
Остаётся пожелать всем удачи, чтобы не оглядываться назад после перехода на 5-ку.
Renat, огромное спасибо за статью! Очень интересно и познавательно. К сожалению у меня не получилось применить скрипт MQL5DLL Test.mq5. Делал всё как написано в статье. Но когда запускал скрипт, MT 5 просто закрывался как подкошенный. Не знаю в чём проблема. Может из-за оси? У меня MS Vista x64. Просьба подсказать пути решения :-)
Прочтите все статью еще раз, пожалуйста.
Там как раз есть место про генерацию ошибки (запись в нулевые адреса) внутри DLL с последующим отловом этой ошибки терминалом без падения оного. Нужно закомментировать вызов метода fnCrashTest.
Сегодня проверю этот код на Vista x64 - может это наша ошибка.
Прочтите все статью еще раз, пожалуйста.
Там как раз есть место про генерацию ошибки (запись в нулевые адреса) внутри DLL с последующим отловом этой ошибки терминалом без падения оного. Нужно закомментировать вызов метода fnCrashTest.
Сегодня проверю этот код на Vista x64 - может это наша ошибка.
Да я всё внимательно прочитал и не один раз :-))
Забыл сказать, что функцию fnCrashTest(int arr) в скрипте MQL5DLL Test.mq5 я закомментировал. И всё равно получаю краш. :-(
Вот так это выглядит. Или нужно в коде dll закомментировать функцию fnCrashTest(int arr)?
1) какая версия терминала 32 или 64 битная?
2) какая версия dll 32 или 64 битная?