Проблемы при загрузке DLL в MQL5 - страница 2

 
Konstantin Nikitin :

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

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

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

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

Хорошо, вы хотите сказать, что мой PythonRuntime.Dll должен находиться в \ MQL5 \ Libraries ( TERMINAL_DATA_PATH \ MQL5 \ Libraries) по этому пути. Я тоже пробовал это, но у меня это не работает. Подскажите, пожалуйста, что-нибудь еще. Я поместил обе библиотеки в \ MQL5 \ Libraries ( TERMINAL_DATA_PATH \ MQL5 \ Libraries), но ничего не работает. Приходит та же ошибка.

 

Подскажите пожалуйста, что мне делать. Я могу поделиться DLL, если хотите. Сценарий моего случая ясен. Я использую DLL на MQL5, которая использует стороннюю DLL или готовую DLL. Но я получаю сообщение об ошибке. Я сохранил стороннюю DLL в той же папке. Не понимаю, почему не удается найти файл.

Я все проверил и зол на MetaQuotes MT5 / MT4.

 
jaffer wilson:

Подскажите пожалуйста, что мне делать. Я могу поделиться DLL, если хотите. Сценарий моего случая ясен. Я использую DLL на MQL5, которая использует стороннюю DLL или готовую DLL. Но я получаю сообщение об ошибке. Я сохранил стороннюю DLL в той же папке. Не понимаю, почему не удается найти файл.

Я все проверил и зол на MetaQuotes MT5 / MT4.

Нужно поместить в MQL5\Libraries все DLL, от которой зависит Ваша DLL. Чтобы определить все связанные DLL, используйте Dependency Walker.


 
jaffer wilson:

Я прикрепил все свои DLL. Пожалуйста, посмотрите на это с помощью Dependency Walker. Я пытался использовать, но мой компьютер завис. Возможно, у меня нет подходящего ресурса для Dependency Walker. Пожалуйста, дайте мне знать.

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

 
Vladimir Karputov :

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

Спасибо за то, что поделился этим. Я не знал об этом. Я отправлю ему личное сообщение, если он захочет увидеть библиотеки DLL.

 
jaffer wilson:

Спасибо за то, что поделился этим. Я не знал об этом. Я отправлю ему личное сообщение, если он захочет увидеть библиотеки DLL.

Вам самому надо выяснить зависимость вашей DLL от других.

Терминал, для загрузки .NET библиотек создаёт специальный .Net домен, который изолирован от стандартного окружения.
При загрузке .NET dll к этому домену подключаются папки MQL5\Libraries + папка загружаемой в MQL программу .NET библиотеки - все зависимости ищутся ТОЛЬКО по этим путям.

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

У вас же NET приложение?  Еще раз говорю, посмотрите, как и где ищутся пользовательские сборки. Добавьте обработчик в свой код:

        static Run() {
            AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;
        }// Run()

После чего останется написать сам обработчик.  У меня здесь опубликована статья "Почтовая рассылка сервисами Google", как я понимаю, там как раз такой случай описан.