Fatto, ora mi dice:
...va tolto quel: = 0
Inoltre, se la funzione non deve restituire niente, quel
As Pointer può essere omesso.
In buona sostanza la chiamata di una funzione esterna non ha differenze dalla chiamata di una funzione che abbiamo creato all'interno del nostro programma Gambas. L'unica differenza è che, essendo essa
esterna, dobbiamo dichiarare questa circostanza, e fare in modo che Gambas chiami tale funzione posta all'esterno dei suoi sorgenti. Ciò si ottiene mediante appunto l'uso di
Extern. La dichiarazione di una funzione esterna va effettuata
al di fuori delle routine.
Extern serve per
richiamare funzioni esterne a Gambas. ...è un po' come se ''Extern'' annunciasse: "
Farò in modo che il programma utilizzi questa funzione "xxxx(yyy)" che non appartiene alle risorse di Gambas, ma si trova in questa libreria.".
L'unica difficoltà che può essere incontrata, in modo particolare per chi è completamente a digiuno di nozioni basilari del linguaggio C, è la comprensione dei
prototipi e delle dichiarazioni, ed in modo particolare degli eventuali parametri formali, delle funzioni esterne che sono scritte in C/C++. Infatti, dette funzioni dovranno essere riscritte secondo il protocollo Gambas.
Riguardo alla funzione vera e propria, essa sarà posta all'interno di una routine. Esempio:
Private EXTERN funzione_esterna(valore1 As String, Valore2 As integer) As Integer IN "libreria_esterna:num_vers"
Public Sub routine_esempio(primoValore As String, secondoValore As Integer)
Dim rit_funz As Integer
' passiamo i due valori alla funzione perché li elabori:
rit_funz = funzione_esterna(primoValore, secondo Valore)
Print rit_funz
End
La libreria può anche essere dichiarata separatamente, e prima della dichiarazione
Extern:
Library "libreria_esterna:num_vers"
Il numero della versione può essere anche omesso.
Vi è da aggiungere che la dichiarazione di una libreria influenzerà ogni dichiarazione del prototipo di una funzione esterna con
Extern successiva. Cosicché, se sarà necessario fruire di funzioni presenti in due o più librerie, bisognera dichiarare la Libreria corrispondente prima di
Extern e della routine contenente la funzione da utilizzare.
E' possibile dichiarare le librerie esterne anche prima della dichiarazione con EXTERN del prototipo delle correlate funzioni:
Library "1^_libreria_esterna:num_vers"
Private EXTERN funzione_esterna1(valoreA As ..., ValoreB As ...) As ...
Library "2^_libreria_esterna:num_vers"
Private EXTERN funzione_esterna2(valoreC As ..., ValoreD As ...) As ...
Public Sub prima_routine_esempio(...qui eventuali parametri della routine...)
..... ' qui l'uso della funzione_esterna_1( )
End
Public Sub seconda_routine_esempio(...qui eventuali parametri della routine...)
..... ' qui l'uso della funzione_esterna_2( )
End
Per maggiori informazioni vedere la Wiki:
https://www.gambas-it.org/wiki/index.php/Guide_della_comunit%c3%a0#Interfacciare_Gambas_con_librerie_dinamiche_esterne_.soin particolare:
http://www.gambas-it.org/wiki/index.php/Extern:_richiamare_funzioni_esterne_a_Gambas