Wywołanie funkcji zewnętrznych

Aby zaimportować funkcje zewnętrzne w kodzie programu MQL4 wykorzystuje się tak zwane późne wiązania, co oznacza, że funkcja zewnętrzna nie jest ładowana do pamięci w momencie uruchomienia EA, wskaźnika lub skryptu, tylko w momencie konkretnego wywołania (np. spełnienia instrukcji warunkowej if). Jeśli natomiast instrukcja warunkowa nie zostanie spełniona, funkcja zewnętrzna nie zostanie załadowana do pamięci i uruchomiona.

Nie zaleca się stosowania pełnej ścieżki dostępowej do pliku biblioteki, tylko podanie samej nazwy, wówczas program MQL4 sam zaczynie przeszukiwać katalogi w celu załadowania funkcji z biblioteki. Kolejność przeszukiwania poszczególnych katalogów jest następująca:

  • terminal_dir\experts\library, a jeśli tam nie zostanie znaleziona to
  • terminal_dir\experts dla EA, terminal_dir\experts\indicators dla wskaźników, terminal_dir\experts\scripts dla skryptów, czyli w miejscu z którego został uruchomiony dany program.

Biblioteki zewnętrzne są to tak zwane biblioteki współdzielone, ponieważ wiele programów może załadować funkcje z jednej biblioteki niezależnie od siebie (funkcje ładowane są w osobne obszary pamięci).

Biblioteki systemowe DLL poszukiwane są w następującej kolejności:

  1. terminal_dir\experts\library – domyślny katalog bibliotek
  2. terminal_dir – katalog główny aplikacji terminala
  3. \ - aktualny katalog w którym uruchomiony został program
  4. windows_dir\system32 (lub windows_dir\system dla Win/9598)- katalog systemowy Windows
  5. windows_dir – katalog główny systemu Windows
  6. PATH – katalogi określone przez zmienne środowiskowe Windows

Funkcje importowane muszą posiadać swoje unikatowe nazwy. Funkcje o tej samej nazwie nie mogą być wywoływane z różnych bibliotek, a także niedozwolone jest, aby nazwy funkcji importowych były takie same jak słowa zastrzeżone języka MQL4 (np. nazwy typów danych, nazw funkcji wbudowanych).

Kompilator języka MQL4 nie ma możliwości weryfikacji parametrów wewnętrznych zdefiniowanych w plikach bibliotek, dlatego należy zwrócić szczególną uwagę, aby deklaracje funkcji, były dokładnie takie same jak te wewnątrz biblioteki. Bardzo istotne jest też aby typ danych był spójny.

Dopuszczalne jest rzutowanie typów danych np. typu AnsiChar do typu string lub typu single do typu double, ale należy być przy tym bardzo uważnym i zadbać o prawidłowość parametrów przekazywanych oraz zwracanych przez funkcję.
Parametry przekazywane do funkcji zewnętrznych, importowych mogą być przekazywane przez wartość lub przez referencję i nie można stosować wartości domyślnych tylko zawsze muszą być podane parametry jawne.

W przypadku, gdy nasz program nie może załadować biblioteki zewnętrznej generuje komunikat błędu i wyświetla komunikat w dzienniku terminala, jednocześnie nie uruchamiając naszego programu. Najczęstsze przyczyny błędów wywołania funkcji z bibliotek to nieprawidłowa nazwa pliku biblioteki, brak pliku biblioteki w przeszukiwanych katalogach, błędna nazwa wywoływanej funkcji lub błędne przekazywanie parametrów do funkcji.

 

Niniejszy materiał, przygotowany przez DM BOŚ S.A. ma charakter wyłącznie informacyjny, prezentowany jest w celach edukacyjnych i nie stanowi porady prawnej oraz nie jest rekomendacją osobistą w ramach świadczenia usługi doradztwa inwestycyjnego zgodnie z przepisami prawa. DM BOŚ S.A. nie udziela gwarancji dokładności, aktualności, oraz kompletności niniejszych informacji. Zaleca się przeprowadzenie we własnym zakresie niezależnego przeglądu informacji z niniejszego materiału.

1/1