Проблемы при загрузке DLL в MQL5

 

Вот код и ошибка:

Код:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1


#import  "Indicators\\..\\Libraries\\PythonConnect.dll"

int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   Print(PythonConnect1::TRENDFINDER());
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Ошибка:

        2020.01.01 00:00:00   System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Python.Runtime, Version=2.5.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
        2020.01.01 00:00:00      at PythonConnect.PythonConnect1.TRENDFINDER()
        2020.01.01 00:00:00      --- End of inner exception stack trace ---
        2020.01.01 00:00:00      at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
        2020.01.01 00:00:00      at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
        2020.01.01 00:00:00      at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
        2020.01.01 00:00:00      at Wrapper.Wrapper.Call(MethodInfo method, Int64 owner, Int64 parameters, Int64 result)
        2020.01.01 00:00:00   .Net runtime error

Библиотеки DLL помещаются в ту же папку. Пожалуйста, дайте мне знать, что я могу сделать.

 
Я все еще жду. Пожалуйста, дайте мне знать, что я могу сделать. Мой проект из-за этого застрял.
 
Импорт функций (#import)
Может в самой библиотеке косячок у вас. Почитайте что вам написало. Google переводчик на крайний случай ни кто не отменял.
 
jaffer wilson:
Я все еще жду. Пожалуйста, дайте мне знать, что я могу сделать. Мой проект из-за этого застрял.

Вы не обозначили список вызываемых функций

Пример:

#import "kernel32.dll"
int    AreFileApisANSI(void);
int    UnlockFile(HANDLE file,uint file_offset_low,uint file_offset_high,uint number_of_bytes_to_unlock_low,uint number_of_bytes_to_unlock_high);
int    UnlockFileEx(HANDLE file,uint reserved,uint number_of_bytes_to_unlock_low,uint number_of_bytes_to_unlock_high,OVERLAPPED &overlapped);
int    WriteFile(HANDLE file,const ushort &buffer[],uint number_of_bytes_to_write,uint &number_of_bytes_written,OVERLAPPED &overlapped);
int    WriteFile(HANDLE file,const ushort &buffer[],uint number_of_bytes_to_write,uint &number_of_bytes_written,PVOID overlapped);
int    WriteFileGather(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_write,uint &reserved,OVERLAPPED &overlapped);
int    WriteFileGather(HANDLE file,FILE_SEGMENT_ELEMENT &segment_array[],uint number_of_bytes_to_write,uint &reserved,PVOID overlapped);
#import
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
System.Reflection.TargetInvocationException: 

Exception has been thrown by the target of an invocation. ---> 
System.IO.FileNotFoundException: 
Could not load file or assembly 'Python.Runtime, Version=2.5.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified.

at PythonConnect.PythonConnect1.TRENDFINDER()

...

.Net runtime error

Это название ошибки: System.Reflection.TargetInvocationException

Это где она произошла: PythonConnect.PythonConnect1.TRENDFINDER()

Это в чём ошибка:

  • Could not load file or
  • assembly 'Python.Runtime, Version=2.5.1.0, Culture=neutral, PublicKeyToken=null' or
  • one of its dependencies.

The system cannot find the file specified.

Это значит, что у вас проблема на стороне библиотеки, как и сказал Konstantin Nikitin.
Видимо вы указываете для использования какой-то файл, а библиотека его не находит.

 

Ну там же ясно написано:

System.IO.FileNotFoundException: 
Could not load file or assembly '........

Система не может найти сборку (файл). Возможно эта сборка и имеется на диске, но обратите внимание на правила поиска сборок, пользовательских и прочих. Это можно почитать у Рихтера.

 
Vladimir Pastushak :

Вы не обозначили список вызываемых функций

Пример:

Я пытаюсь сделать то, что мне показала эта статья: https://www.mql5.com/en/articles/5563

Как вы увидите, DLL импортирована в файл. И нет определений функций. Я пробовал то же самое.

 
Konstantin Nikitin :
Импорт функций (#import)
Может в самой библиотеке косячок у вас. Почитайте что вам написало. Google переводчик на крайний случай ни кто не отменял.

Спасибо, что поделились документацией. Я сослался на это: https://www.mql5.com/ru/docs/runtime/imports

Вот почему у меня такой путь. Но я не понимаю, почему библиотека не может получить Python.Runtime.dll? Надеюсь, этому есть объяснение. Созданная мной DLL отлично работает где угодно, но не в MQL5.

 
Nikita Serditov :

Это название ошибки: System.Reflection.TargetInvocationException

Это где она произошла: PythonConnect.PythonConnect1.TRENDFINDER()

Это в чём ошибка:

  • Could not load file or
  • assembly 'Python.Runtime, Version=2.5.1.0, Culture=neutral, PublicKeyToken=null' or
  • one of its dependencies.

The system cannot find the file specified.

Это значит, что у вас проблема на стороне библиотеки, как и сказал Konstantin Nikitin.
Видимо вы указываете для использования какой-то файл, а библиотека его не находит.

Подскажите, пожалуйста, где мне разместить свою DLL Python.Runtime.DLL?

 
Andrei Novichkov:

Ну там же ясно написано:

Система не может найти сборку (файл). Возможно эта сборка и имеется на диске, но обратите внимание на правила поиска сборок, пользовательских и прочих. Это можно почитать у Рихтера.

Подскажите, пожалуйста, где мне разместить свою DLL Python.Runtime.DLL?
 
jaffer wilson:
Подскажите, пожалуйста, где мне разместить свою DLL Python.Runtime.DLL?

Импорт функций (#import) -> Вызов импортируемых функций

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

  1. Директория из которой был запущен модуль, импортирующий dll. Под модулем понимается эксперт, скрипт, индикатор или библиотека EX5;
  2. Директория каталог_данных_терминала\MQL5\Libraries (TERMINAL_DATA_PATH\MQL5\Libraries);
  3. Директория, из которой был запущен клиентский терминал MetaTrader 5;
  4. Системная директория;
  5. Директория Windows;
  6. Текущая директория;
  7. Директории, перечисленные в системной переменной PATH.
и т.д.

В документации есть связующие ссылки. Их то-же желательно смотреть

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