MT4: поймать ошибку импорта dll
Results 1 to 9 of 9

Thread: MT4: поймать ошибку импорта dll

  1. #1
    Привет,

    только маленький вопрос: может быть, кто-то из вас знает.

    если у меня есть что-то вроде заголовочного файла mqh.

    Код PHP: <code><span style=”color: #000000”> <span style=”color: #0000BB”></span><span style=”color: #FF8000”>#import”xxx.dll”
    </span><span style=”color: #0000BB”>voidyyy</span><span style=”color: #007700”>();
    </span><span style= ”color: #FF8000”>#import
    </span><span style=”color: #0000BB”></span> </span> </code> и xxx.dll не может быть найден I получить ошибку в журнале:

    не удается загрузить библиотеку «xxx.dll» (ошибка 126)

    Кто-нибудь знает простой способ отобразить такую ​​ошибку с помощью Alert или MessageBox вместо того, чтобы просто записывать ее в файл журнала.


    Спасибо

  2. #2
    У меня такая же проблема на демо-счете с EA Indior. Когда я проверяю экспертов, я получаю сообщение об ошибке, не могу загрузить xxxx .dll ( 126 ) Кто-нибудь думает, что они могут исправить это за небольшую плату? У меня есть доступ к исходному коду советника Indior, так как файл mql4, а не dll.

  3. #3

    Quote Originally Posted by ;
    Хотя я должен отметить, что нельзя полагаться на то, что MT4 освободит все дескрипторы Dll, когда советник все равно завершит работу.
    Этот баг возникает только при запуске советника в тестере egy. Там он забывает FreeLibrary() dll, которая была загружена с помощью #import после завершения теста egy. При каждом запуске тестера счетчик ссылок увеличивается на единицу. Это можно обойти в deinit() с помощью IsTesting() и вручную FreeLibrary() еще раз. Во время нормальной работы (на живом графике) он всегда правильно освобождает то, что было загружено (с помощью #import). Все вышесказанное относится только к #import. Если в вашем коде есть дополнительная функция LoadLibrary(), то, конечно, вам все равно потребуется такое же количество вызовов FreeLibrary().

  4. #4
    Большое спасибо: я попробую.

  5. #5
    Дох!
    Конечно же, эту небольшую проблему решает функция IsDllsAllowed()!

  6. #6
    Нет проблем. Я не уверен, что произойдет, если снять флажок «Разрешить вызовы DLL». Я предполагаю, что вызов LoadLibrary() вернет 0, даже если файл DLL существует. Если это так, вы можете использовать функции WinAPI FileOpen() или FindFirst(), чтобы узнать, присутствует ли файл DLL, позволяя вам «предупредить» любой из двух случаев: 1) DLL существует, но не может быть открыт - предлагается Разрешить библиотеки DLL снято. 2) Отсутствует файл DLL.

  7. #7
    Не без вашей собственной работы... попробуйте LoadLibrary FreeLibrary, найденную в Kernel32.dll, чтобы вы могли сделать что-то подобное в Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); если (hmod != 0) FreeLibrary(hmod); еще Предупреждение (невозможно загрузить xxx.DLL); Обратите внимание, что мы должны освободить нашу загрузку DLL, потому что MT4 уже загрузит ее, а Windows поддерживает счетчик количества раз, когда DLL загружается экземпляром приложения. Если вы не освободите наш вызов loadlibrary, тогда MT4 не отпустит DLL Go, когда советник завершит работу. Хотя я должен отметить, что нельзя полагаться на то, что MT4 освободит все дескрипторы Dll после завершения работы советника, но мы должны, по крайней мере, делать то, что должны! Конечно, это только гарантирует, что файл DLL существует и что это допустимая DLL, но не гарантирует, что функции, определенные в вашем операторе импорта, действительно существуют. Для этого вы должны использовать функцию GetProcAddress(). См. документы MSDN здесь.
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

  8. #8

    Quote Originally Posted by ;
    Не без вашей собственной работы... попробуйте LoadLibrary FreeLibrary, найденную в Kernel32.dll, чтобы вы могли сделать что-то подобное в Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); если (hmod != 0) FreeLibrary(hmod); еще Предупреждение (невозможно загрузить xxx.DLL); Обратите внимание, что мы должны освободить нашу загрузку DLL, потому что MT4 уже загрузит ее, а Windows поддерживает счетчик количества раз, когда DLL загружается экземпляром приложения. Если вы не освободите наш вызов loadlibrary, тогда MT4 не отпустит DLL, когда...
    Спасибо диапазону!

  9. #9

    Quote Originally Posted by ;
    У меня такая же проблема на демо-счете с EA Indior. Когда я проверяю экспертов, я получаю сообщение об ошибке, не могу загрузить xxxx .dll ( 126 ) Кто-нибудь думает, что они могут исправить это за небольшую плату? У меня есть доступ к исходному коду советника Indior, так как файл mql4, а не dll.
    У меня есть опыт в ремонте, дам вам контакты.

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.