Extern: richiamare funzioni esterne a Gambas

Da Gambas-it.org - Wikipedia.
Versione del 7 apr 2012 alle 04:01 di 217.72.77.12 (Discussione) (Introduzione)

Thess,Sorry about that rotten meal! And the meakrt! That photo is outstandin, though. I love masks, and I find this image very engaging. Your story reminds me of the James Joyce short story "Araby." Thanks for stopping by this a.m.

Esempi pratici

Mostriamo appresso un esempio pratico utilizzando una funzione esterna di ALSA{2}.

1) Il quid: vogliamo far sì che il nostro applicativo si connetta con ALSA o con un client;

2) per ottenere questo risultato sappiamo che è necessario richiamare una specifica, particolare funzione esterna di ALSA: int snd_seq_connect_to(snd_seq_t *seq, int my_port, int dest_client, int dest_port)
Questa funzione va così interpretata:
- int : vuol dire che ritorna un valore integer;
- snd_seq_connect_to : è la funzione in sé;
- (snd_seq_t *seq, int my_port, int dest_client, int dest_port) : sono i parametri della funzione. In questo caso: un Pointer (definito dal simbolo *) e tre valori Integer (definiti da ciascun int);

In Gambas sarà così tradotta:
snd_seq_connect_to(primoValore As Pointer, secondoValore As Integer, terzoValore As Integer, quartoValore As Integer) As Integer (quest'ultimo "As Integer" è ovviamente giustificato dal fatto che la funzione, come sappiamo, restituisce un valore integer);

3) il luogo ove questa funzione è contenuta: questa funzione è presente nella Libreria contenente le funzioni di ALSA: Libasound.so.2 .


Il tutto, allora, sarebbe così da impostarsi:

' Dichiarazione della Libreria contenente la funzione esterna che si intende utilizzare:
Library "libasound:2"

....

' Extern dichiara la funzione esterna che si intende richiamare ed utilizzare (lasciamo per comodità qui i nomi: 1°valore, etc, precedentemente usati):
Private Extern snd_seq_connect_to(primoValore As Pointer, secondoValore As Integer, terzoValore As Integer, quartoValore As Integer) As Integer

' Anche in questo caso la routine riceverà i valori da passare alla funzione esterna:
Public Sub chiamtaEsterna(primoVal As Pointer, secondoVal As Integer, terzoVal As Integer, quartoVal As Integer)

 Dim err As Integer

' viene praticamente richiamata ed utilizzata la funzione esterna, e le si passano i quattro valori da essa richiesti:
err = snd_seq_connect_to(primoVal, secondoVal, terzoVal, quartoVal)

......

End




Altro esempio pratico:

' Dichiarazione della Libreria contenente le funzioni esterne da utilizzare
(in questo esempio la libreria delle funzioni matematiche):
Library "libm:6"

' Dichiarazione mediante Extern delle funzioni esterne da utilizzare:
Private Extern modf(param As Float, pp As Pointer) As Float
Private Extern fmod(param1 As Float, param2 As Float) As Float

Public Sub Button1_Click()

Dim pp As Pointer = Alloc(SizeOf(gb.Float))

' Uso delle funzioni esterne, e ne vediamo in console il risultato:
   Print modf(5.123456, pp)
   Print fmod(5.654321, 2)

End

Note

[1] Prendiamo come esempio il rapporto fra Gambas ed il sistema sonoro ALSA. Se non si avesse la possibilità di richiamare, e quindi di utilizzare le funzioni proprie di ALSA, non sarebbe possibile interloquire con questo sistema esterno. Non sarebbe possibile gestirne le capacità, e dunque utilizzare le sue funzioni e potenzialità. L'istruzione Extern ci consente di superare questo muro, questo limite.

[2] Gli applicativi per la gestione del Midi, presenti nella pagina "Progetti degli utenti" del Forum di questo portale Gambas-it.org, abbondano di richiami alle funzioni esterne delle API di ALSA.