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ı.