Differenze tra le versioni di "Estrarre il valore di una costante definita in un file d'intestazione in C"
Riga 68: | Riga 68: | ||
'''End''' | '''End''' | ||
+ | |||
+ | |||
+ | ===3° esempio=== | ||
+ | In questo esempio verrà estratto il valore della Costante prescelta mediante la creazione di un'apposita libreria dinamica condivisa .so, che restituirà il predetto valore. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <FONT Color=red size=4><B>Paragrafo in costruzione !</b></font> |
Versione delle 14:46, 18 ago 2016
Per estrarre il valore di una Costante eventualmente presente in un file d'intestazione (header file), e definita con la parola #define o Const, oppure il valore esplicitamente assegnato ad un elemento di unaEnumerazione, evitando così di dichiarane una identica anche nel codice Gambas, si potranno utilizzare un paio di codici esemplificativi.
1° esempio
In questo esempio i due parametri di tipo stringa della funzione rappresentano rispettivamente:
- "fileh" = il percorso del file d'intestazione scritto in C;
- "costante" = il preprocessore "#define" seguito dal nome identificativo della costante di cui si intende estrarre il valore definito.
Private Function RicavaCostante(fileh As String, costante As String) As String Dim fl As File Dim s As String fl = Open fileh While True s = fl.ReadLine() If s Begins costante Then s = Replace$(s, costante, Null) ' Elimina un eventuale commento alla destra del valore della costante: If s Like "*/*" Then s = Trim(Left(s, InStr(s, "/") - 1)) ' Adatta un eventuale valore esadecimale per una sua corretta gestione nel codice Gambas: If s Begins "0x" Then s = Trim(Replace(s, "0x", "00")) Break Endif Wend fl.Close() Return s End
2° esempio
In quest'altro esempio si intende cercare il valore della costante M_PI dichiarata ed istanziata nel file d'intestazione "math.h":
Public Sub Main() Dim percorso_file, obiettivo, ris As String percorso_file = "/usr/include/math.h" If Not Exist(percorso_file) Then Error.Raise("Percorso o file Errato !") obiettivo = "# define M_PI" ris = Estrai_valore(percorso_file, obiettivo) Print ris End Private Function Estrai_valore(percorso As String, ob As String) As String Dim s As String s = File.Load(percorso) If InStr(s, ob) = 0 Then Error.Raise("Definizione '" & ob & "' inesistente in: " & percorso) s = Scan(s, "*" & ob & "*\n*")[1] If InStr(s, "/") > 0 Then s = Scan(s, "*/*")[0] Endif s = Trim(s) If Right(s, 1) = "," Then s = Left(s, Len(s) - 1) Return s End
3° esempio
In questo esempio verrà estratto il valore della Costante prescelta mediante la creazione di un'apposita libreria dinamica condivisa .so, che restituirà il predetto valore.
Paragrafo in costruzione !