В MQL5 всегда есть место подвигу ! ;) - страница 5

 
sergeev:

вряд ли. мегабайт инфы через OBJ_TEXT не толкнешь.

ближайший кандидат - ресурсы

Заметьте: точка - это фактически структура напичканная  переменными разных типов. Сохраняется при закрытии/открытии терминала, а также сохраняется в шаблоне.

 
DC2008:

Заметьте: точка - это фактически структура напичканная  переменными разных типов. Сохраняется при закрытии/открытии терминала, а также сохраняется в шаблоне.

?
 
sergeev:

Всё хочу спросить, а ты уже нашёл решение для  DLL 32/64   ?

В винде (\System32\) есть какой-то  WOW32reg.exe    Я кругами ходил-бродил, на -h -? не реагирует, зарегить вслепую так ничего и не смог.

Гугл тоже отмалчивается, на microsoft.com  ничего не нашёл...  в общем акуально.

 
sergeev:
?

А что не понятно? Давайте конкретную задачу, а то всё вокруг да около...

 
MetaDriver:

Всё хочу спросить, а ты уже нашёл решение для  DLL 32/64   ?

В винде (\System32\) есть какой-то  WOW32reg.exe    Я кругами ходил-бродил, на -h -? не реагирует, зарегить вслепую так ничего и не смог.

Гугл тоже отмалчивается, на microsoft.com  ничего не нашёл...  в общем акуально.

Так, чисто идея, сам не пробовал. После определения битности терминала использовать динамическую загрузку DLL через LoadLibrary.

 
MetaDriver:

Всё хочу спросить, а ты уже нашёл решение для  DLL 32/64   ?

А какая здесь проблема?

В импорте указываешь две одинаковые функции, только с разными параметрами(int/long). В программе в зависимости от разрядности 32/64 вызываешь соответствующую функцию.

 
MetaDriver:

Всё хочу спросить, а ты уже нашёл решение для  DLL 32/64   ?

для вызова функций из виндовых (когда передаем в них указатели) - нашел.

благодаря контексту :: все решается аккуратно.


Yurich:

В импорте указываешь две одинаковые функции, только с разными параметрами(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(...)


То есть мы не плодим имена функций, а делаем автоопределение битности и вызов правильной импортируемой.

 
MetaDriver:

Всё хочу спросить, а ты уже нашёл решение для  DLL 32/64   ?

Самое простое одноименные x32 и x64 DLL кинуть в разные системные каталоги Windows - соответственно SysWOW64 и System32.

 

А вот межпрограммный обмен данными, так это ИМХО действительно проблема, особенно если подходить к ней бессистемно.
Так наверное рассуждали и Microsoft, когда в девяностых годах прошлого века перешли от файлового, поточного обмена к объектному - OLE от него к ActiveX -> COM -> COM+ -> .NET т.е. на основе технологии межпрограмного обмена создали новую систему программирования и исполнения кода.
 

 
Yurich:

А какая здесь проблема?

В импорте указываешь две одинаковые функции, только с разными параметрами(int/long). В программе в зависимости от разрядности 32/64 вызываешь соответствующую функцию.

Вообще не хочет грузить 32-битную, и не хочет запускать программу, даже если я уже и не собираюсь её (dll) вызывать.

При отжатой галке "Разрешить использование DLL" кнопка [OK] вообще не отображается, только отмена.  Разрешаешь, жмёшь OK - вылетает программа.  Тупик.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


Вообще в идеале, хотелось бы иметь возможность вызывать dll32 в терминале х64.  Точно знаю, что теоретически возможно.  Не знаю как.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

Вообще не хочет грузить 32-битную, и не хочет запускать программу, даже если я уже и не собираюсь её (dll) вызывать.

При отжатой галке "Разрешить использование DLL" кнопка [OK] вообще не отображается, только отмена.  Разрешаешь, жмёшь OK - вылетает программа.  Тупик.


Вообще в идеале, хотелось бы иметь возможность вызывать dll32 в терминале х64.  Точно знаю, что теоретически возможно.  Не знаю как.

Только что проверил:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Библиотека не загрузилась, но пока не вызвана её функция всё работает (вывод TEST);

Теперь вызываем функцию такой библиотеки:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Причина обращения: