- Makro ikamesi (#define)
- Program Özellikleri (#property)
- Dosya Ekleme (#include)
- Fonksiyonların İçe Aktarımı (#import)
- Koşullu Derleme (#ifdef, #ifndef, #else, #endif)
Fonksiyonun İçe Aktarımı (#import)
Fonksiyonlar, derlenmiş MQL5 modüllerinden (*.ex5 dosyaları) ve işletim sistemi modüllerinden (*.dll dosyaları) içe aktarılır. Modülün ismi #import direktifinde belirtilir. Derleyicinin, fonksiyon çağrısını ve aktarılan parametreleri doğru şekilde biçimlendirebilmesi için, fonksiyonların tam tarifi gereklidir. Fonksiyon tarifleri #import "modül ismi" direktifinin hemen ardından gelir. Yeni komut #import (parametresiz olabilir), içe aktarılan fonksiyonların tariflerinden oluşan bloğu tamamlar.
#import "file_name"
|
İçe aktarılan fonksiyonlar herhangi bir isme sahip olabilir. Aynı isme ama farklı modüllere sahip iki fonksiyon aynı anda tanımlanabilir. İçe aktarılan fonksiyonların isimleri, gömülü fonksiyon isimleriyle aynı olabilir. Kapsam çözünürlüğü işlemi, hangi fonksiyonların çağrılması gerektiğini tanımlar.
#import anahtar sözcüğünden sonra belirlenen dosya arama emri İçe Aktarılan Fonksiyonların Çağrısı içinde tanımlanır.
İçe aktarılan fonksiyonlar derlenen modülün içinde olmadığından, derleyici geçirilen parametreleri doğrulayamaz. Bu yüzden, çalışma zamanı hatalarından kaçınmak amacıyla, içe aktarılan fonksiyona geçirilen parametrelerin düzeni ve sırası doğru tarif edilmelidir. İçe aktarılan (EX5'den veya DLL modülünden) fonksiyonlara geçirilen parametreler ön tanımlı değerlere sahip olabilirler.
İçe aktarılan fonksiyonlarda şunlar kullanılamaz:
- işaretçiler (*);
- Dinamik dizilere ve/veya işaretçilere verilen linkler.
Dizgiler veya herhangi tipli dinamik diziler içeren sınıflar, string tipi diziler veya karmaşık nesneler, DLL dosyasından içe aktarılan fonksiyonlara parametre olarak geçirilemezler
Örnekler:
#import "stdlib.ex5"
|
MQL5 programının çalıştırılması sırasında fonksiyonların içe aktarımı için erken bağlama kullanılır. Yani kütüphaneler, programın ex5 uzantılı dosyası ile yüklenir.
Yüklenebilir modülünün bütünüyle belirtilmiş isminin (Sürücü:\Dizin\Dosyaismi.Uzn) kullanılması tavsiye edilmez. MQL5 kütüphaneleri terminal_konumu\MQL5\Libraries dosyasından yüklenir.
İçe aktarılan işlev 32 ve 64 bit Windows sürümleri için farklı çağrı sürümlerine sahipse, her ikisi de içe aktarılmalı ve _IsX64 değişkenini kullanarak doğru işlev sürümü açıkça çağrılmalıdır.
Örnek:
#import "user32.dll"
|
.NET kütüphanelerinden fonksiyonları içe aktarma
.NET kütüphane fonksiyonlarıyla çalışmak için, belirli fonksiyonları tanımlamadan DLL'nin kendisini içe aktarmanız yeterlidir. MetaEditor, çalışabileceğiniz tüm fonksiyonları otomatik olarak içe aktarır:
- Basit yapılar (POD, plain old data) - yalnızca basit veri tiplerini içeren yapılar.
- Sadece basit tiplerin ve POD yapılarının veya dizilerinin kullanıldığı parametrelere sahip 'public static' fonksiyonlar.
Kütüphaneden fonksiyonları çağırmak için içe aktarmanız yeterlidir:
#import "TestLib.dll"
|
TestClass sınıfının Inc fonksiyonunun C# kodu aşağıdaki gibidir:
public class TestClass
|
Yürütme sonucunda, komut dosyası 42 değerini geri döndürür.
Ayrıca Bakınız