Скачать MetaTrader 5

DLL в индикаторе при визуальном тестировании

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Язык MQL5 поддерживает технологию OpenCL. Попробуй сам!
elibrarius
1759
elibrarius 2016.10.16 18:09 

Здравствуйте,

есть индикатор с DLL.

При запуске только индикатора на реальном графике - DLL работает и индикатор что-то показывает.

Сделал вызов этого индикатора из эксперта.

При запуске в тестере в визуальном режиме, в журнале пишет, что

Cannot load 'my.dll'
.....
Cannot call 'fnCalk', 'my.dll' is not loaded


Это ограничение визуального режима или я что-то не так делаю? Или из эксперта нельзя индикаторы с DLL запускать?

DLL лежит в  MQL5\Libraries. В папку с индикатором тоже положил - не помогло.

Yuriy Asaulenko
3331
Yuriy Asaulenko 2016.10.16 18:32  
elibrarius:

Это ограничение визуального режима или я что-то не так делаю? Или из эксперта нельзя индикаторы с DLL запускать?

DLL лежит в  MQL5\Libraries. В папку с индикатором тоже положил - не помогло.

Попробуйте к DLL полный путь прописать. Не поможет - уж тогда точно тестер.)
Alexey Volchanskiy
16755
Alexey Volchanskiy 2016.10.16 18:58  
elibrarius:

Здравствуйте,

есть индикатор с DLL.

При запуске только индикатора на реальном графике - DLL работает и индикатор что-то показывает.

Сделал вызов этого индикатора из эксперта.

При запуске в тестере в визуальном режиме, в журнале пишет, что

Cannot load 'my.dll'
.....
Cannot call 'fnCalk', 'my.dll' is not loaded


Это ограничение визуального режима или я что-то не так делаю? Или из эксперта нельзя индикаторы с DLL запускать?

DLL лежит в  MQL5\Libraries. В папку с индикатором тоже положил - не помогло.

DLL достаточно загрузить один раз. Попробуйте перед тестированием запустить индюк на графике - DLL загрузится и , возможно, подхватится из тестера.

Во всяком случае, DLL с экспертом в тестере работают точно (проверял только в МТ4). Возможно, какой-то глюк, когда идет вызов индюка с DLL. 

Alexey Volchanskiy
16755
Alexey Volchanskiy 2016.10.16 19:04  
Yuriy Asaulenko:
Попробуйте к DLL полный путь прописать. Не поможет - уж тогда точно тестер.)

Путь не нужен, dll ищется в \MQL4\Libraries или \MQL5\Libraries. Ну или по стандартным виндозным путям для dll. Тут именно какой-то тестерный глюк.

Кстати, хозяйке на заметку, если из первой dll грузится вторая, то вторая почему-то должна лежать в корне папки терминала. Все сказанное тестировалось в режиме portable. 

Yuriy Asaulenko
3331
Yuriy Asaulenko 2016.10.16 19:08  
Alexey Volchanskiy:

Кстати, хозяйке на заметку, если из первой dll грузится вторая, то вторая почему-то должна лежать в корне папки терминала. Все сказанное тестировалось в режиме portable. 

Из цикла: маленькие хитрости.))
elibrarius
1759
elibrarius 2016.10.16 19:17  
Alexey Volchanskiy:

DLL достаточно загрузить один раз. Попробуйте перед тестированием запустить индюк на графике - DLL загрузится и , возможно, подхватится из тестера.

Запустил - не подхватился.

В принципе не уверен, что эксперт запустит индикатор с DLL. Воскресение - тиков нет, посмотреть на реале не могу...

Т.к. при запуске он не показывает предупреждения, что индикатор собирается грузить DLL. Видимо потому, что индикатор в onInit вызывается, а терминал наверное не проверяет наперед, что используют индикаторы. А так как мы не даем согласия на использование этой dll - то она и не запускается.

elibrarius
1759
elibrarius 2016.10.16 19:26  

Решил проблему.

В эксперте надо тоже вызвать DLL которая в индикаторе и сделать обращение к одной из его функций (у меня одна, может надо ко всем, если их много, чтобы разрешить их использование)

#import "my.dll"
void fnCalk(....);
#import


потом в onInit вызов который никогда не сработает, но терминал определит, что функция нужна

pseudocall=false;

if(pseudocall){fnCalk(....);}

 

Передача двумерных массивив в DLL и обратно
Передача двумерных массивив в DLL и обратно
  • www.mql5.com
Форум трейдеров MQL5.community
Yuriy Asaulenko
3331
Yuriy Asaulenko 2016.10.16 21:53  
A100:

Скорее из цикла: "Напишу кривую dll. Опыт программирования 20 лет" 

Не исключено, но и не скажите. Ех4-5 исполняются в песочнице, и кто его знает что там происходит. Возможно и регистрация ДЛЛ в реестре не указ. Особенно, если вызов ДЛЛ через ДЛЛ. Когда имеешь дело с пчелами, ничего заранее сказать нельзя.(с)
A100
3939
A100 2016.10.16 22:11  
Yuriy Asaulenko:
Особенно, если вызов ДЛЛ через ДЛЛ.
У меня такой вызов работает без нареканий, при том, что обе .dll расположены вне песочницы
Yuriy Asaulenko
3331
Yuriy Asaulenko 2016.10.16 22:46  
A100:
У меня такой вызов работает без нареканий, при том, что обе .dll расположены вне песочницы

Засады бывают и на ровном месте. Такие, например (из VB):

if a=1 then... Еле нашел.)) Везде работает, а здесь нет, присваивает а=1 и условие всегда выполняется.

Пришлось именно в этом месте написать if 1=a then... 

Yuriy Asaulenko
3331
Yuriy Asaulenko 2016.10.16 23:29  
A100:
В языках высокого уровня это могло бы означать например - ленивые вычисления
Не сказал, что это был уже VB6. Вполне полноценный язык, с классами, наследованием и пр.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий