Differenze tra le versioni di "Extern: richiamare funzioni esterne a Gambas"

Da Gambas-it.org - Wikipedia.
(Note)
Riga 6: Riga 6:
 
* la libreria nella quale è contenuta la funzione da richiamare.
 
* la libreria nella quale è contenuta la funzione da richiamare.
  
Una volta compreso che quel che si vuole ottenere è possibile attraverso l'uso di una funzione esterna a Gambas, bisognerà individuare la specifica funzione che consente di realizzare il nostro obiettivo. La funzione esterna, utile allo scopo del programma, dovrà essere richiamata dal programma medesimo. Poiché tale funzione è appunto ''esterna'' a Gambas, bisognerà conoscere il ''luogo'' ove essa si trova. Il ''luogo'' che contiene la funzione esterna è la "''Libreria''"; ed anzi una specifica libreria, la quale, pertanto, andrà dichiarata in anticipo rispetto alla funzione. Le librerie, contenenti funzioni ''esterne'' a Gambas, richiamabili da Gambas, sono quelle con estensione ''.so'' . E' opportuno, quando possibile, indicare anche il numero della versione della Libreria.
+
Una volta compreso che quel che si vuole ottenere è possibile attraverso l'uso di una funzione esterna a Gambas, bisognerà individuare la specifica funzione che consente di realizzare il nostro obiettivo. La funzione esterna, utile allo scopo del programma, dovrà essere richiamata dal programma medesimo. Poiché tale funzione esterna è scritta in C, bisognerà interpretare il significato e tradurla in forma comprensibile da Gambas. Inoltre, poiché essa è appunto ''esterna'' a Gambas, bisognerà conoscere il ''luogo'' ove essa si trova. Il ''luogo'' che contiene la funzione esterna è la "''Libreria''"; ed anzi una specifica libreria, la quale, pertanto, andrà dichiarata in anticipo rispetto alla funzione. Le librerie, contenenti funzioni ''esterne'' a Gambas, richiamabili da Gambas, sono quelle con estensione ''.so'' . E' opportuno, quando possibile, indicare anche il numero della versione della Libreria.
  
 
Possiamo, dunque, dire che è un po' come se ''Extern'' annunciasse: « ''Farò in modo che il programma utilizzi questa funzione "xxxx(yyy)", la quale non appartiene alle risorse di Gambas, ma si trova in questa libreria: zzzz.so (oppure già precedentemente dichiarata).'' ».
 
Possiamo, dunque, dire che è un po' come se ''Extern'' annunciasse: « ''Farò in modo che il programma utilizzi questa funzione "xxxx(yyy)", la quale non appartiene alle risorse di Gambas, ma si trova in questa libreria: zzzz.so (oppure già precedentemente dichiarata).'' ».
Riga 30: Riga 30:
 
  ''<Font Color= #006400>' Gambas class file''</font>
 
  ''<Font Color= #006400>' Gambas class file''</font>
 
   
 
   
  ''<Font Color= #006400>' dichiariamo la Libreria contenente la funzione esterna che ci interessa: ''</font>
+
  ''<Font Color= #006400>' dichiariamo la Libreria contenente la funzione esterna che ci interessa:''</font>
  Library "libreria_esterna:num_vers"
+
  <Font Color= #FF0000>Library "libreria_esterna:num_vers"</font>
 
   
 
   
 
   
 
   
  ''<Font Color= #006400>' dichiariamo la funzione esterna specifica che ci interessa:''</font>
+
  ''<Font Color= #006400>' dichiariamo la funzione esterna specifica che ci interessa.
  Private EXTERN funzione_esterna(valoreA As ..., ValoreB As ...) As ...
+
'' ' Ipotizziamo che in C sia così scritta: '''int funzione_esterna_da_richiamare(char * valoreStringa, int valoreInteger)'''.
 +
'' ' In Gambas la richiameremo così:''</font>
 +
  Private <Font Color= #FF0000>EXTERN funzione_esterna_da_richiamare(valoreA As String, ValoreB As Integer) As Integer</font>
 
   
 
   
+
  '''Public''' Sub routine_esempio(primoValore As String, secondoValore As Integer)
  '''Public''' Sub routine_esempio(primoValore As Integer, secondoValore As Integer)
 
 
   
 
   
 
  Dim rit_funz As Integer
 
  Dim rit_funz As Integer
Riga 44: Riga 45:
 
  ''<Font Color= #006400>' chiamiamo la funzione esterna che ci interessa,
 
  ''<Font Color= #006400>' chiamiamo la funzione esterna che ci interessa,
 
  '' ' e le passiamo i due valori perché li elabori:''</font>
 
  '' ' e le passiamo i due valori perché li elabori:''</font>
   rit_funz = funzione_esterna(vlr1, vlr2)
+
   <Font Color= #FF0000>rit_funz = funzione_esterna_da_richiamare(vlr1, vlr2)</font>
 
   
 
   
 
   Print rit_funz
 
   Print rit_funz
Riga 51: Riga 52:
  
 
   
 
   
 
<Font Color= #FF0000><b><< PAGINA IN COSTRUZIONE >></B> </font>
 
  
  

Versione delle 16:59, 21 gen 2012

Gambas offre la possibilità di utilizzare potenzialità, capacità di sistemi esterni mediante il richiamo di loro funzioni. A volte può capitare nella programmazione la necessità di utilizzare potenzialità che Gambas da solo non può offrire{1}. L'istruzione che Gambas pone a disposizione del programmatore per richiamare tali funzioni esterne è: Extern.

Per il richiamo di funzioni esterne è necessario conoscere in particolare tre elementi:

  • il quid, ossia il cosa fare, cosa ottenere;
  • la funzione esterna che ci consente di realizzare quel quid;
  • la libreria nella quale è contenuta la funzione da richiamare.

Una volta compreso che quel che si vuole ottenere è possibile attraverso l'uso di una funzione esterna a Gambas, bisognerà individuare la specifica funzione che consente di realizzare il nostro obiettivo. La funzione esterna, utile allo scopo del programma, dovrà essere richiamata dal programma medesimo. Poiché tale funzione esterna è scritta in C, bisognerà interpretare il significato e tradurla in forma comprensibile da Gambas. Inoltre, poiché essa è appunto esterna a Gambas, bisognerà conoscere il luogo ove essa si trova. Il luogo che contiene la funzione esterna è la "Libreria"; ed anzi una specifica libreria, la quale, pertanto, andrà dichiarata in anticipo rispetto alla funzione. Le librerie, contenenti funzioni esterne a Gambas, richiamabili da Gambas, sono quelle con estensione .so . E' opportuno, quando possibile, indicare anche il numero della versione della Libreria.

Possiamo, dunque, dire che è un po' come se Extern annunciasse: « Farò in modo che il programma utilizzi questa funzione "xxxx(yyy)", la quale non appartiene alle risorse di Gambas, ma si trova in questa libreria: zzzz.so (oppure già precedentemente dichiarata). ».

La Libreria, contenente la funzione esterna da richiamare, può essere dichiarata separatamente, e prima della dichiarazione Extern:

Library "libreria_esterna:num_vers"

Extern......

La Libreria può anche essere dichiarata all'interno dell'istruzione di Extern:

Extern ................. IN "libreria_esterna:num_vers"


La funzione vera e propria, da richiamare per il suo utilizzo, sarà posta all'interno di una routine. Dunque, nel caso di dichiarazione separata della Libreria, la scaletta delle dichiarazioni sarà la seguente:
1) dichiarazione della Libreria contenente la funzione;
2) dichiarazione della funzione esterna (che avverrà al di fuori della routine che farà uso di quella funzione);
3) chiamta ed uso della funzione.

Esempio:

' Gambas class file

' dichiariamo la Libreria contenente la funzione esterna che ci interessa:
Library "libreria_esterna:num_vers"


' dichiariamo la funzione esterna specifica che ci interessa.
 ' Ipotizziamo che in C sia così scritta: int funzione_esterna_da_richiamare(char * valoreStringa, int valoreInteger).
 ' In Gambas la richiameremo così:
Private EXTERN funzione_esterna_da_richiamare(valoreA As String, ValoreB As Integer) As Integer

Public Sub routine_esempio(primoValore As String, secondoValore As Integer)

Dim rit_funz As Integer

' chiamiamo la funzione esterna che ci interessa,
 ' e le passiamo i due valori perché li elabori:
  rit_funz = funzione_esterna_da_richiamare(vlr1, vlr2)

  Print rit_funz

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.