LOADNATIVE: dll/so içindeki fonksiyonu çağırmak
TROIA, native (dll/so) kütüphanelerdeki fonksiyonları LOADNATIVE komutuyla çağırabilir. Komut kütüphane adını, çağrılacak fonksiyonun imzasını (signature) ve parametreleri alır:
OBJECT:
STRING IMZA,
STRING SONUC;
IMZA = 'int abs(int)';
LOADNATIVE 'msvcrt.dll', IMZA TO SONUC WITH '-4';
RUNFILE: dosyayı varsayılan uygulamayla açmak
Client'ta bir dosyayı (ör. bir .htm raporu) hangi uygulamanın açacağı, kullanıcının işletim sistemi ve tercihine bağlıdır — TROIA kodunun bunu bilmesi mümkün değildir. RUNFILE komutu, dosya için o an tanımlı varsayılan uygulamayı tetikler; yalnızca client tarafı yollarla çalışır:
OBJECT:
STRING DOSYAYOLU;
DOSYAYOLU = '*C:\TMP\rapor.htm';
OPEN FILE DOSYAYOLU FORNEW;
PUT '<b>RUNFILE ile acilan rapor</b>';
CLOSE FILE;
RUNFILE DOSYAYOLU;
RUNPROGRAM: harici bir program çalıştırmak
Application server üzerinde harici bir komut ya da program çalıştırmak için RUNPROGRAM kullanılır. WITH WAIT ile programın bitmesi beklenir, çıktısı bir değişkene aktarılabilir:
OBJECT:
STRING KOMUT,
STRING SONUC;
KOMUT = '*ipconfig -all';
RUNPROGRAM KOMUT WITH WAIT INTO SONUC;
* işareti komutun client tarafında çalıştırılacağını belirtir; işaretsiz komutlar sunucu tarafında çalışır.
Örnek: bir komutun çıktısını yorumlamak
RUNPROGRAM çoğunlukla döngü içinde, harici bir aracın çıktısını okuyup TROIA tarafında yorumlamak için kullanılır:
WHILE SAYAC < 20
BEGIN
SAYAC = SAYAC + 1;
KOMUT = '*C:\TMP\whois.exe ' + DOMAIN;
RUNPROGRAM KOMUT WITH WAIT INTO SONUC;
IF STRPOS(SONUC, 'No whois information found') > 0 THEN
DURUM = 'musait';
ELSE
DURUM = 'dolu';
ENDIF;
ENDWHILE;
Sonuç
Üçü de "TROIA dışına çıkma" komutları ama farklı katmanlarda çalışır: LOADNATIVE işletim sistemi kütüphanesine, RUNFILE kullanıcının varsayılan uygulamasına, RUNPROGRAM ise bağımsız bir sürece iniyor. Hangisini seçeceğiniz, ihtiyacınızın client mı sunucu mu tarafında olduğuna bağlı.
Yorumlar (0)
Yorum Yaz