Здравствуйте! Не подскажите как на уровне компилятора определить какая версия 32 или 64 разрядная MT5?
Для определения MT4 или MT5 я делаю так:
#ifdef __MQL5__
#ifdef _DEBUG
Print("Hello from MQL5 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL5 compiler [RELEASE]");
#endif
#endif
#else
#ifdef __MQL4__
#ifdef _DEBUG
Print("Hello from MQL4 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL4 compiler [RELEASE]");
#endif
#endif
#endif
#endif
и тогда для переноса из МТ4 в МТ5 достаточно поменять расширение.
Теперь из-за перехода на 64 разрядную (x32 у меня просто перестала работать и вылетает с ошибкой) нужно отличать 32 от 64 разрядной?
int property_id // идентификатор свойства
);
с идентификатором TERMINAL_X64
Здравствуйте! Не подскажите как на уровне компилятора определить какая версия 32 или 64 разрядная MT5?
...
Теперь из-за перехода на 64 разрядную (x32 у меня просто перестала работать и вылетает с ошибкой) нужно отличать 32 от 64 разрядной?
Модуль ex5 содержит сразу обе версии кода (32 битную и 64 битную). Поэтому едва ли причиной отказа в работе стал переход на 64 разрядную версию. Скорее всего просто терминал сильно обновился и Ваш ex5 просто перестал в нем работать.
1.Версия 1455 (х32) прекрасно работает, но стоит попробовать обновить при попытке запуска terminal.exe, metatester.exe, metaeditor.exe вылетает с ошибкой поэтому перешел на 64-х разрядную.
2.В MT5 в 32 и 64 используются разные DLL типа:
#import "trans_new_x32.dll" (для x32)
#import "trans_new_x64.dll" (для х64)
и теперь мне нужно, чтобы компилятор в зависимости от разрядности подставлял либо 1- вариант либо 2-й.
1.Версия 1455 (х32) прекрасно работает, но стоит попробовать обновить при попытке запуска terminal.exe, metatester.exe, metaeditor.exe вылетает с ошибкой поэтому перешел на 64-х разрядную.
2.В MT5 в 32 и 64 используются разные DLL типа:
#import "trans_new_x32.dll" (для x32)
#import "trans_new_x64.dll" (для х64)
и теперь мне нужно, чтобы компилятор в зависимости от разрядности подставлял либо 1- вариант либо 2-й.
благодаря контексту :: все решается аккуратно.
В импорте указываешь две одинаковые функции, только с разными параметрами(int/long). В программе в зависимости от разрядности 32/64 вызываешь соответствующую функцию.
например вот так:
#import "MemMap32.dll" int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz #import "MemMap64.dll" int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz #import // переопределяем вызовы для контроля битности int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error)); }в а коде вызываешь с явным :: контекстом.
::MemRead(...)
Здравствуйте! Не подскажите как на уровне компилятора определить какая версия 32 или 64 разрядная MT5?
Я ничего не понял, не могли-бы вы на моем конкретном примере написать что и куда?
#property tester_library "trans_new_x64.dll";//x64
#import "trans_new_x32.dll" //(для x32)
bool ConnectionADO(string&);
#import
#import "trans_new_x64.dll" //(для х64)
bool ConnectionADO(string&);
#import
int OnInit()
{
Result = s_ado.S_ConnectionADO("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + PathBase + BaseFileName + ";Persist Security Info=False");//(для x32)
Result = s_ado.S_ConnectionADO("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PathBase + BaseFileName + ";Persist Security Info=False");//(для x64)
}
else trans_new_x32::ConnectionADO(...);
else trans_new_x32::ConnectionADO(...);
Это я вроде понял, а как быть с описанием импортируемых функций
#import "trans_new_x32.dll" //(для x32)
bool ConnectionADO(string&);
#import
#import "trans_new_x64.dll" //(для х64)
bool ConnectionADO(string&);
#import
из какой DLL из верхней или из нижней будет вызываться функция ConnectionADO(string&) ?
Вам же уже ответили. <имя длл>::<имя функции> для однозначного вызова

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Не подскажите как на уровне компилятора определить какая версия 32 или 64 разрядная MT5?
Для определения MT4 или MT5 я делаю так:
#ifdef __MQL5__
#ifdef _DEBUG
Print("Hello from MQL5 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL5 compiler [RELEASE]");
#endif
#endif
#else
#ifdef __MQL4__
#ifdef _DEBUG
Print("Hello from MQL4 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL4 compiler [RELEASE]");
#endif
#endif
#endif
#endif
и тогда для переноса из МТ4 в МТ5 достаточно поменять расширение.
Теперь из-за перехода на 64 разрядную (x32 у меня просто перестала работать и вылетает с ошибкой) нужно отличать 32 от 64 разрядной?