L'oggetto File secondo i sorgenti di Gambas

Da Gambas-it.org - Wikipedia.
Versione del 27 dic 2016 alle 14:33 di Vuott (Discussione | contributi) (Creata pagina con "Un ''Oggetto'' in Gambas è costituito e vive grazie ad una complessa serie di aree di memoria riservate, rappresentate solitamente da diverse ''Strutture'' e relative sub-str...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Un Oggetto in Gambas è costituito e vive grazie ad una complessa serie di aree di memoria riservate, rappresentate solitamente da diverse Strutture e relative sub-strutture, dichiarate in uno o più file header dei sorgenti Gambas. Anche l'Oggetto di tipo File in Gambas risponde a tale caratteristica.

L'Oggetto File in Gambas ha come primo riferimento la Struttura, denominata "CFILE" e presente nel file header ".../main/gbx/gbx_c_file.h" dei sorgenti di Gambas, ove è così dichiarata:

typedef
       struct {
               CSTREAM ob;
               int watch_fd;
               }
       CFILE;

Come si può notare, tale Struttura è formata da soli due membri:

  • CSTREAM ob;
  • int watch_fd;


Il secondo membro watch_fd è un intero che rappresenta il descrittore del file aperto.
Il primo membro, CSTREAM ob, invece rappresenta a sua volta un'altra Struttura presente nel citato file header ".../main/gbx/gbx_c_file.h" dei sorgenti di Gambas, ove è così dichiarata:

typedef
       struct {
               OBJECT ob;
               STREAM stream;
               GB_VARIANT_VALUE tag;
               }
       CSTREAM;

Il primo membro di quest'altra sub-Struttura è un Puntatore ad un'ulteriore Struttura di tipo OBJECT, dichiarata nel file header ".../main/gbx/gbx_class.h" dei sorgenti di Gambas, e dalla quale potremo ottenere qualche informazione sulla variabile di tipo File utilizzata nel codice.


Per penetrare nelle suddette Strutture e leggerne alcuni valori, in esse contenuti, dovremo sevirci del Metodo .Address( ) dea Classe Object, come nell'esempio seguente:

Public Sub Main()
 
 Dim fl As File
 Dim p1, p2 As Pointer
 
  fl = Open "/percorso/del/file" For Read
  If IsNUll(fl) Then Error.Raise("Impossibile aprire il file !")
  
' p1 rappresenta: "struct CFILE.CSTREAM ob;" in "User.Home &/ trunk/main/gbx/gbx_c_file.h"
  p1 = Object.Address(fl)



Pagina in costruzione !