Возможно ли программно определить, что используется старый компилятор? - страница 2

 
Чуть-чуть смекалки и немного dll, и это реализуемо. С помощью например того кода, который выложил MetaDriver.
 
Renat:

Да, старые программы для 500/509 билдов работают и в новой версии.

Поддержка старых исполнимых EX4 файлов является для нас приоритетом и мы специально держим две виртуальные машины исполнения для старого и нового вариантов.

Это гибкое и лояльное к пользователям решение, которое позволит им продолжать использование в терминале своих, годами проверенных программ, даже если те окажутся не совсем совместимыми с новым компилятором и виртуальной машиной.

Однако хотелось такой же гибкости и в отношении программистов, для этого можно было бы, например определить в старой виртуальной машине константу __MQL4BUILD__ = 0 ,тогда с помощью условных операторов типа if(__MQL4BUILD__) можно было бы легко управлять блоками исходного кода для старого компилятора и различных версий новых компиляторов.
 

 
revers45:

Это гибкое и лояльное к пользователям решение, которое позволит им продолжать использование в терминале своих, годами проверенных программ, даже если те окажутся не совсем совместимыми с новым компилятором и виртуальной машиной.

Однако хотелось такой же гибкости и в отношении программистов, для этого можно было бы, например определить в старой виртуальной машине константу __MQL4BUILD__ = 0 ,тогда с помощью условных операторов типа if(__MQL4BUILD__) можно было бы легко управлять блоками исходного кода для старого компилятора и различных версий новых компиляторов.

Ну вариант неплох и вполне рабочий.  Это если, конечно, сможешь выклянчить у Рената спец-билд такого mql4-компилятора.  Я думаю сделать его не проблема,  а вот чтоб его фицияльно распространить до выпуска публичной версии нового MT...

Почему-то мне кажется что он не будет в восторге от этой идеи.

 
MetaDriver:

Ну вариант неплох и вполне рабочий.  Это если, конечно, сможешь выклянчить у Рената спец-билд такого mql4-компилятора.  Я думаю сделать его не проблема,  а вот чтоб его фицияльно распространить до выпуска публичной версии нового MT...

Почему-то мне кажется что он не будет в восторге от этой идеи.

Думаю клянчить тут бесполезно, а что касается спец-билда mql4-компилятора, то для совместимости его по любому стоило бы подправить, хотя бы для настройки на новую структуру каталога MQL4\...

TheXpert:
Чуть-чуть смекалки и немного dll, и это реализуемо. С помощью например того кода, который выложил MetaDriver.

Вы правы, с помощью dll старая и новая версии виртуальной машины легко определимы, например по ANSI/UNICODE строковым параметрам функций, но этим будем пользоваться, когда MQ не оставят нам другого выхода, ведь кое-кто категорически считает, что длл применять нельзя.

 
revers45:
Не надо передергивать. Маркет одно, открытый код с использованием системных длл совсем другое.
 

Обратите внимание, что существующая модель обновлений очень быстро в течение 3-4 недель произведет полный апгрейд всех существующих терминалов.

Это означает, что закладываться на поддержку 509 билдов не имеет смысла.

 
revers45:

Думаю клянчить тут бесполезно, а что касается спец-билда mql4-компилятора, то для совместимости его по любому стоило бы подправить, хотя бы для настройки на новую структуру каталога MQL4\...

У тебя логика хромает.  Метаквотам это не нужно (см. пост Рената выше).


Вы правы, с помощью dll старая и новая версии виртуальной машины легко определимы, например по ANSI/UNICODE строковым параметрам функций, но этим будем пользоваться, когда MQ не оставят нам другого выхода, ведь кое-кто категорически считает, что длл применять нельзя.

Ты уж определись чего хочешь:  (1) распознавания директив компилятора или (2) использования обеих виртуальных машин.  Использовать обе ВМ из одного mql-кода не получится по-любому, ты хоть обвешайся DLL-ками.  Распознавание ("новая"/"старая") действительно сделать можно, но тебе это не поможет никак в твоей задаче.   // как я её понял.  а я понятливый вапче (чего бы там кто по этому поводу не думал).

Это, кстати, не значит, что возможность использования обеих виртуальных машин одновременно вообще нереальна. Реальна - но совершенно в другой постановке и реализации.  И никак не из одного и того же mql-кода.

 
Renat:

Обратите внимание, что существующая модель обновлений очень быстро в течение 3-4 недель произведет полный апгрейд всех существующих терминалов.

Это означает, что закладываться на поддержку 509 билдов не имеет смысла.

Готов поверить вашему опыту, но всё-таки кажется, что переход на использования нового кода может оказаться гораздо более длительным и болезненным, а окончательно состоится только с ликвидацией второй виртуальной машины.

MetaDriver:
У тебя логика хромает.  Метаквотам это не нужно (см. пост Рената выше).

Ты уж определись чего хочешь:  (1) распознавания директив компилятора или (2) использования обеих виртуальных машин.  Использовать обе ВМ из одного mql-кода не получится по-любому, ты хоть обвешайся DLL-ками.  Распознавание ("новая"/"старая") действительно сделать можно, но тебе это не поможет никак в твоей задаче.   // как я её понял.  а я понятливый вапче (чего бы там кто по этому поводу не думал).

Это, кстати, не значит, что возможность использования обеих виртуальных машин одновременно вообще нереальна. Реальна - но совершенно в другой постановке и реализации.  И никак не из одного и того же mql-кода.

Ни о какой экзотике и одновременном использовании виртуальных машин, я речь не веду, задачи гораздо более прагматичные.

Если говорить о DLL то это проблемы использования строковых массивов, указателей на массивы бар и.т.д. где при переходе на новую модель, будет реальная потеря производительности.
 

Причина обращения: