Ошибки, баги, вопросы - страница 1017
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Короче нельзя определить реализацию функции в .mqh и использовать ее без проблем в любом .ex5
:)
Можно. Но в случае когда ты из одного .ex5 вызываешь функции другого .ex5, при том, что функция с таким именем существует в обоих, ты должон позаботиться об точном указании прострканства имён. То бишь тот самый ::В() должен по идее проблему решать. А если он не решает - то это в сервисдеск, поскольку это баг, который нужно исправить.
Остановимся на ответе СервисДеска:
"При компиляции 1.mq5, внутри функции B() не понятно, какая из функций должна быть вызвана,
импортированная A() или экспортируемая A() - т.к. компилятор не понимает, что Вы имели ввиду одну и ту же функцию"
Они правы по форме - но при желании компилятору можно (и нужно) было бы подсказать что это одна и та же функция, поскольку повторюсь имя модуля на момент компиляции - доступно (указано в #import).
Тем более, что если сначала в одном месте поcтавить :: и скомпилировать, потом удалить и поставить :: в другом - то всё работает, но согласитесь - это очень неудобно и после 10-15 таких вынужденных перестановок я перешёл на #define
Остановимся на ответе СервисДеска:
"При компиляции 1.mq5, внутри функции B() не понятно, какая из функций должна быть вызвана,
импортированная A() или экспортируемая A() - т.к. компилятор не понимает, что Вы имели ввиду одну и ту же функцию"
Они правы по форме - но при желании компилятору можно (и нужно) было бы посказать что это одна и таже функция, поскольку повторюсь имя модуля на момент компиляции доступно (указано в #import).
Для таких подсказок существует оператор разрешения контекста "::", однако в данном случае он не применим, поскольку имя модуля (файла) тоже совпадает.
Совет адекватный - изменить структуру программы.
Тем более, что если сначала в одном месте поcтавить :: и скомпилировать, а потом удалить и поставить :: в другом - то всё работает, но согласитесь - это очень неудобно
и после 10-15 таких вынужденных перестановок я перешёл на #define
Не лучшее решение. Параметризаванные дефайны полезны только когда контроль типов нежелателен, или когда вместо параметров подставляются "многословные" куски текста. Как заменитель инлайн-функции дефайн безусловно вреден для здоровья программы.
--
В твоём случае я бы отказался от использования .ex5-библиотек. И всё бы со свистом заработало. Практическая польза от них есть только в сокрытии реализации (при продаже), а в остальных случаях пользу от них не вижу.
Ты на продажу пишешь?
Ты на продажу пишешь?
Для себя.
Без .ex5 не получается. У меня ещё есть функции вида F( string& [] ), они как то в .dll не лезут :)
Можно их наверное как то через разделитель заталкивать, но пока не пробовал
Просто в MQL5 нет inline функций (по форме) и я использую вместо них - параметрические макросы, что в общем не совсем правильно, поскольку отсутствует контроль типов
А еще, емнип, компилятор не оптимизирует выражения, поэтому получится дополнительный минус по скорости. Лучше сверьте.
Кстати насчет инлайнинга -- он работает. Из-за этого еще проблемы с дебаггером были.
Кстати насчет инлайнинга -- он работает. Из-за этого еще проблемы с дебаггером были.
Так он работает на уровне компилятора. А хотелось бы на уровне языка. Приводил выше пример - через необъяснимый "обход компилятора" - всё работает, а напрямую - нужны дополнительные телодвижения, иногда существенные, поскольку как Вы советовали не включать описание и реализацию одной и той же функции в один файл можно конечно, но тогда 10 полноценных .mqh разбиваются уже на 100 более мелких .mqh
За скоростью пока не гнался. Главное - удобство и чтобы объем кода не рос в геометрической прогрессии.
Уже даже столкнулся с необходимостью применять в MQL5 аналоги #if #else (пока криво, но местами - работает)
За скоростью пока не гнался. Главное - удобство и чтобы объем кода не рос в геометрической прогрессии.
A100:
Без .ex5 не получается. У меня ещё есть функции вида F( string& [] ), они как то в .dll не лезут :)
....
Боже.. .. :)
Я не предлагал использовать DLL вместо .ex5-библиотек. Только многа-многа .mqh и один исполняемый .mq5, больше ничего.
Только многа-многа .mqh и один исполняемый .mq5, больше ничег