Podstawy MetaQuotes Language 4-Zmienne-Wywołanie funkcji zewnętrznych w Forex-Słownik poleceń MQL4 - bossa.pl
2017.10.21, godz. 03:18
baner_ZAGRANICA_479x59_B.jpg
kontakt

Wywoływanie funkcji zewnętrznych

Bardzo przydatnym elementem języka MQL4 jest możliwość importowania/wywoływania funkcji zewnętrznych, co w tym przypadku oznacza możliwość wywołania funkcji z bibliotek w formacie EX4 lub DLL. Jak wiemy każda funkcja składa się z deklaracji (czyli tego jaka jest nazwa funkcji, jakie parametry przekazujemy do funkcji, jakie wartości są zwracane przez funkcję) oraz definicji (czyli bloku kodu wykonywalnego). W przypadku bibliotek zewnętrznych definicja czynności wykonywanych przez funkcję znajduje się w bibliotece zewnętrznej. Dlatego, aby skorzystać z funkcji zewnętrznych wystarczy tylko poinformować kompilator o tym, że będziemy importować funkcję stosujemy do tego słowo kluczowe #import z podaniem nazwy biblioteki o typie string, czyli podwójny cudzysłów, oraz podajemy dokładną deklarację funkcji.

 

Przykład:

# import "user32.dll"
int MessageBoxA(int hWnd, string szTekst, string szTytul, int nTyp);
int SendMessageA(int hWnd, int Msg, int wParam, int lParam);
# import "lib.ex4"
double round(double value);
# import

 


Parametry wywołania funkcji zewnętrznych mogą być przekazywane zarówno przez wartość jak i przez referencje, co w tym drugim przypadku oznacza, że przekazujemy tak zwany wskaźniki obszaru pamięci, który jest wspólnie dostępny dla kodu wykonywalnego funkcji jak i dla kodu MQL4. Dane przekazywane mogą być dowolnego typu, co jest jednoznaczne dla bibliotek EX4, natomiast może być problematyczne w przypadku bibliotek DLL, które mogą być napisane w dowolnym języku programowania wówczas konieczne może się okazać wykorzystanie rzutowania danych. Dane typu string są przekazywane, jako wskaźnik (przez referencję) do odpowiedniego bloku pamięci (trzeba pamiętać, że wewnętrzna reprezentacja danych łańcuch składa się z dwóch części: długość bloku pamięci i wskaźnik do bloku pamięci). Jeśli istnieje potrzeba przekazywania danych typu int lub double przez referencje to przydatna może być do tego celu jednowymiarowa tablica odpowiedniego typu.

 

Przykład:

# import "twoja_biblioteka.dll"
void PrzekazIntPrzezReferencje(int & OneInt[]);
# import
int start ()
{
int tablica[1];
...
PrzekazIntPrzezReferencje(tablica);
Print(tablica[0]);
...
}

 

bos bank logo
Grupa kapitałowa
Nagroda specjalna i tytuł BROKERA ROKU 2015
Nagroda specjalna i tytuł BROKERA
ROKU 2015, przyznane przez GPW.

logo_FMR2017aktualny.jpg Finansowa Marka Roku: wyrazista marka promująca edukację, umocnienie pozycji lidera rynku kontraktów terminowych.

nagroda najlepszy dom maklerski 2015
Najwyższa ocena dla DM BOŚ w ankiecie czytelników Gazety Giełdy Parkiet 2015r.