Quando ne ho parlato io mi avete massacrato "usa le classi, sono meglio di qui, meglio di la ecc. ecc..." e adesso sei qui a consigliare di usarle?
Devi riportarmi il post, nel quale io ti ho massacrato per aver tu suggerito di usare le
Strutture.
E' paradossale la tua affermazione ! Io faccio
abbondante uso della risorsa
Struttura, in particolar modo nelle chiamate a funzioni esterne a Gambas con
Extern.
Al fine di sottolineare la
mia particolarissima attenzione alle
Strutture in genere, mi preme a questo punto ricordare i miei due
mattoni micidiali sullo studio per l'adattamento delle
Strutture esterne, scritte in C, con Gambas:
1)
http://www.gambas-it.org/wiki/index.php?title=Gestire_con_sicurezza_le_Strutture_esterne2)
http://www.gambas-it.org/wiki/index.php?title=Gestire_con_un_Puntatore_le_Strutture_esternePer chiarire la mia attenzione per le
Strutture, ti passo, allora, questa mia
chicca esemplificativa, che fa riferimento alla pagina sub 1), di come poter adattare in un'applicazione Gambas con codice Gambas una
Struttura esterna molto complessa, scritta in C (in questo caso l'esempio è stato effettuato su una semplice
Struttura del file header
/usr/include/aio.h ):
Library "/tmp/libadhoc"
' int Dim_aiocb()
' Ottiene la dimensione della Struttura "aiocb":
Private Extern Dim_aiocb() As Integer
' void Scrive_aio_fildes(struct *aiocb)
' Scrive un valore nel membro "aio_fildes"
Private Extern Scrive_aio_fildes(po As Pointer, v As Integer)
' int Legge_aio_fildes(struct *aiocb)
' Legge il valore contenuto dal membro "aio_fildes"
Private Extern Legge_aio_fildes(po As Pointer) As Integer
' void Scrive_lio_opcode(struct *aiocb)
' Scrive un valore nel membro "aio_lio_opcode"
Private Extern Scrive_aio_lio_opcode(po As Pointer, v As Integer)
' int Legge_lio_opcode(struct *aiocb)
' Legge il valore contenuto dal membro "aio_lio_opcode"
Private Extern Legge_aio_lio_opcode(po As Pointer) As Integer
Public Sub Main()
Dim i As Integer
Dim p As Pointer
CreaSo("/usr/include/aio.h", "struct aiocb", ["aio_fildes", "aio_lio_opcode"], "/tmp/libadhoc")
i = Dim_aiocb()
Print "La dimensione della Struttura è: ", i; " byte"
p = Alloc(i)
Scrive_aio_fildes(p, 99)
i = Legge_aio_fildes(p)
Print "Valore letto dal membro 'aio_fildes':", i
Scrive_aio_lio_opcode(p, 200)
i = Legge_aio_lio_opcode(p)
Print "Valore letto dal membro 'aio_fildes':", i
Free(p)
End
Private Procedure CreaSo(Percorso_del_file_header As String, Nome_della_Struttura As String, Nome_dei_Membri As String[], libreria_adhoc As String)
Dim s As String
Dim b As Byte
s = "#include <" & Percorso_del_file_header & ">\n\n" &
"int Dim_" & LTrim(Replace(Nome_della_Struttura, "struct", Null)) & "() {\n" &
" return sizeof(" & Nome_della_Struttura & ");\n}" &
"\n\n\n"
For b = 0 To Nome_dei_Membri.Max
s &= "void Scrive_" & Nome_dei_Membri[b] & "(" & Nome_della_Struttura & " *p, int valore) {\n" &
" p->" & Nome_dei_Membri[b] & " = valore;\n}"
"\n\n\n" &
"int Legge_" & Nome_dei_Membri[b] & "(" & Nome_della_Struttura & " *p) {\n" &
" return p->" & Nome_dei_Membri[b] & ";\n}"
Next
File.Save(libreria_adhoc & ".c", s)
Shell "gcc -o " &/ libreria_adhoc & ".so " &/ libreria_adhoc & ".c -shared" Wait
End
E', inoltre, arcinota la disquisizione fra me e
Gianluigi proprio sulle
Strutture (...laddove io vesto sempre i panni dello strenuo difensore proprio delle
Strutture); così come è altrettanto noto in modo sommo che
tuttte le pagine della nostra WIKI, afferenti direttamente od indirettamente alla risorsa
Struttura, sono state scritte da me.
Tra l'altro, come
Gianluigi sa bene, io sono molto restio ad usare i
Variant, in favore invece proprio delle
Strutture !
Pertanto, per me è stato
naturale consigliare a
luca.decarlo l'uso delle
Strutture.