MT4: złap błąd importu dll
Pokaż wyniki od 1 do 9 z 9

Wątek: MT4: złap błąd importu dll

  1. #1
    cześć,

    takie małe pytanko: może ktoś z Was wie.

    jeśli mam coś takiego jak w pliku nagłówkowym mqh.

    Kod 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> i nie można znaleźć pliku xxx.dll I wyskakuje błąd w logu:

    nie można załadować biblioteki „xxx.dll” (błąd 126)

    Każdy zna łatwy sposób wyświetlenia takiego błędu za pomocą Alert lub MessageBox zamiast tylko zapisywania go w pliku dziennika.


    Dzięki

  2. #2
    Mam ten sam problem na koncie demonstracyjnym z EA Indior. Kiedy sprawdzam ekspertów, otrzymuję błąd Nie można załadować xxxx .dll (126) Czy ktoś myśli, że może to naprawić za niewielką opłatą? Mam dostęp do kodu źródłowego EA Indior, ponieważ plik to mql4, ale nie dll.

  3. #3

    Cytat Zamieszczone przez ;
    Chociaż muszę zaznaczyć, że nie można polegać na MT4, aby zwolnić wszystkie uchwyty Dll, gdy EA i tak się zakończy
    Ten błąd występuje tylko podczas uruchamiania EA w testerze egy. Tam zapomina o FreeLibrary() bibliotece dll, która została załadowana za pomocą #import po zakończeniu testu egy. Każde uruchomienie testera spowoduje zwiększenie liczby referencji o jeden. Może być możliwe obejście tego w deinit() z IsTesting() i jeszcze raz ręcznie FreeLibrary(). Podczas normalnej pracy (na wykresie na żywo) zawsze zwalnia to, co zostało poprawnie załadowane (za pomocą #import). Wszystko powyższe odnosi się tylko do #import. Jeśli masz dodatkowe LoadLibrary() w swoim kodzie, to oczywiście nadal potrzebujesz takiej samej liczby wywołań FreeLibrary().

  4. #4

  5. #5
    Tak!
    Oczywiście funkcja IsDllsAllowed() rozwiązuje ten mały problem!

  6. #6
    Bez problemu. Nie jestem pewien, co się stanie, jeśli pole Zezwalaj na wywołania DLL nie zostanie zaznaczone. Wyobrażam sobie, że wywołanie LoadLibrary() zwróci 0, nawet jeśli plik DLL istnieje. W takim przypadku możesz użyć funkcji WinAPI FileOpen() lub FindFirst(), aby dowiedzieć się, czy plik DLL jest obecny, umożliwiając „Alert” w jednym z dwóch przypadków: 1) DLL istnieje, ale nie można go otworzyć - sugeruje Zezwalaj na biblioteki DLL nie jest zaznaczone 2) Brakuje pliku DLL.

  7. #7
    Nie bez odrobiny własnej pracy... wypróbuj LoadLibrary FreeLibrary znalezioną w Kernel32.dll, więc zrobiłbyś coś takiego w Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod != 0 ) FreeLibrary(hmod); else Alert(nie można załadować xxx.DLL); Zauważ, że powinniśmy zwolnić ładowanie biblioteki DLL, ponieważ MT4 już ją załadowało, a system Windows utrzymuje licznik, ile razy biblioteka DLL została załadowana przez instancję aplikacji. Jeśli nie zwolnisz naszego wywołania do loadlibrary, MT4 nie pozwoli DLL odejść, gdy EA się skończy. Chociaż muszę zaznaczyć, że nie można polegać na MT4, aby zwolnić wszystkie uchwyty Dll, gdy EA i tak się zakończy, ale powinniśmy przynajmniej zrobić to, co powinniśmy! Oczywiście gwarantuje to tylko, że plik DLL istnieje i że jest to poprawna biblioteka DLL, ale nie gwarantuje, że funkcje zdefiniowane w instrukcji importu rzeczywiście istnieją. W tym celu należy użyć funkcji GetProcAddress() Zobacz dokumentację MSDN tutaj
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

  8. #8

    Cytat Zamieszczone przez ;
    Nie bez odrobiny własnej pracy... wypróbuj LoadLibrary FreeLibrary znalezioną w Kernel32.dll, więc zrobiłbyś coś takiego w Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod != 0 ) FreeLibrary(hmod); else Alert(nie można załadować xxx.DLL); Zauważ, że powinniśmy zwolnić ładowanie biblioteki DLL, ponieważ MT4 już ją załadowało, a system Windows utrzymuje licznik, ile razy biblioteka DLL została załadowana przez instancję aplikacji. Jeśli nie zwolnisz naszego połączenia z loadlibrary, MT4 nie przepuści biblioteki DLL, gdy...
    Dziękuję rangebound!

  9. #9

    Cytat Zamieszczone przez ;
    Mam ten sam problem na koncie demonstracyjnym z EA Indior. Kiedy sprawdzam ekspertów, otrzymuję błąd Nie można załadować xxxx .dll (126) Czy ktoś myśli, że może to naprawić za niewielką opłatą? Mam dostęp do kodu źródłowego EA Indior, ponieważ plik to mql4, ale nie dll.
    Mam doświadczenie w naprawianiu tego i poproszę o kontakt.

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Używamy cookies
Używamy cookies, aby jak najlepiej dostosować witrynę do Twoich potrzeb. Kontynuowanie przeglądania tej strony, oznacza zgodę na używanie plików cookies. Aby uzyskać więcej informacji zapoznaj się z naszą Polityką Prywatności.