Differenze tra le versioni di "Strutture e Funzioni esterne"

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 3: Riga 3:
  
 
Supponiamo, quindi, di avere una funzione esterna (presente ovviamente in una determinata Libreria che qui come esempio fingiamo si chiami "miaLibreria) che appunto preveda come parametro una ''Struttura''. Supponiamo altresì che il nome di tale Struttura modello sia: ''NomeStruttura''.
 
Supponiamo, quindi, di avere una funzione esterna (presente ovviamente in una determinata Libreria che qui come esempio fingiamo si chiami "miaLibreria) che appunto preveda come parametro una ''Struttura''. Supponiamo altresì che il nome di tale Struttura modello sia: ''NomeStruttura''.
<BR>Nella dichiarazione della funzione esterna con ''Extern'' dovrà essere posto il nome della Struttura ''modello'', mentre nella funzione, quando la si utilizzerà effettivamente in una routine, andrà posto il nome della variabile particolare della Struttura, che ai fini di questo esempio chiameremo: ''strutturaParticolare''.
+
<BR>Nella dichiarazione della funzione esterna con ''Extern'' dovrà essere posto il nome della Struttura ''modello'', mentre nella funzione, quando la si utilizzerà effettivamente in una routine, andrà posto il nome della variabile particolare della Struttura, che ai fini di questo esempio chiameremo: ''variabileStruttura''.
 
+
  <FONT color=gray>' ''Dichiara la Struttura modello:''</font>
 
+
Public Struct <FONT color=#B22222>NomeStruttura</font>
  '<FONT color=#006400>''Gambas-3 class file</font>
+
     membro1 As Byte
+
     membro2 As Short
+
     membro3 As Integer
'<FONT color=#006400>''Dichiariamo la Struttura modello:''</font>
 
  Public Struct <FONT color=#B22222>NomeStruttura</font>
 
     campo1 As String
 
     campo2 As Byte
 
     campo3 As Integer
 
 
   End Struct
 
   End Struct
 
   
 
   
  '<FONT color=#006400>''Creiamo la variabile Struttura particolare:''</font>
+
  <FONT color=gray>' ''Crea la variabile Struttura particolare:''</font>
  <FONT color=#0000FF>strutturaParticolare</font> As New <FONT color=#B22222>NomeStruttura</font>
+
Private <FONT color=#0000FF>variabileStruttura</font> As New <FONT color=#B22222>NomeStruttura</font>
 
   
 
   
 
   
 
   
  '<FONT color=#006400>''Dichiariamo la Libreria che contiene la funzione esterna:</font>
+
  <FONT color=gray>' ''Dichiara la Libreria che contiene la funzione esterna:</font>
  Library "miaLibreria"
+
Library "miaLibreria"
 
   
 
   
   
+
  <FONT color=gray>' ''Dichiara la funzione esterna che andrà ad utilizzare:</font>
'<FONT color=#006400>''Dichiariamo la funzione esterna che andremo ad utilizzare:</font>
 
 
  Private Extern funzione_esterna(varSt As <FONT color=#B22222>NomeStruttura</font>)
 
  Private Extern funzione_esterna(varSt As <FONT color=#B22222>NomeStruttura</font>)
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  '''Public''' Sub Main()
 
   
 
   
  '<FONT color=#006400>''Se si devono passare alla Funzione esterna dei valori per mezzo della Struttura,''
+
  <FONT color=gray>' ''Se si devono passare alla Funzione esterna dei valori per mezzo della Struttura, allora nella routine i membri della Struttura dovranno essere ovviamente riempiti <SPAN style="text-decoration:underline">prima</span> della funzione esterna.''
  ''allora nella routine i campi della Struttura dovranno essere ovviamente riempiti <SPAN style="text-decoration:underline">prima</span> della funzione esterna.''</font>
 
 
   
 
   
  '<FONT color=#006400>''Utilizziamo la funzione esterna:</font>
+
  ' ''Utilizza la funzione esterna:</font>
  funzione_esterna(<FONT color=#0000FF>strutturaParticolare</font>)
+
  funzione_esterna(<FONT color=#0000FF>variabileStruttura</font>)
 
   
 
   
  '<FONT color=#006400>''Se, invece, è la Funzione esterna ad avere il compito di riempire i campi della Struttura,''
+
  <FONT color=gray>' ''Se, invece, è la Funzione esterna ad avere il compito di riempire i membri della Struttura, allora i valori contenuti dai campi della Struttura potranno essere raccolti ovviamente solo <SPAN style="text-decoration:underline">dopo</span> la funzione esterna.''</font>
  ''allora i valori contenuti dai campi della Struttura potranno essere raccolti ovviamente solo <SPAN style="text-decoration:underline">dopo</span> la funzione esterna.''</font>
 
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 45: Riga 37:
 
La ''Funzione esterna'' potrà ritornare proprio una ''Struttura''.
 
La ''Funzione esterna'' potrà ritornare proprio una ''Struttura''.
  
Esempio (usiamo per il riferimento alla Funzione esterna ed alla Struttura le denominazioni del precedente paragrafo):
+
Esempio (usa per il riferimento alla Funzione esterna ed alla Struttura le denominazioni del precedente paragrafo):
  
  '<FONT color=#006400>''Dichiariamo la Funzione esterna che ritornerà una "Struttura":</font>
+
<FONT color=gray>' ''Dichiara la Funzione esterna che ritornerà una "Struttura":</font>
 
  Private Extern funzione_esterna(varI As Integer, varB As Byte) As <FONT color=#B22222>NomeStruttura</font>
 
  Private Extern funzione_esterna(varI As Integer, varB As Byte) As <FONT color=#B22222>NomeStruttura</font>
 
   
 
   
Riga 60: Riga 52:
  
  
===Dereferenziare senza Memory-Stream un ''pointer'', che punta ad una Struttura, passato da una funzione esterna===
+
===Dereferenziare senza Memory-Stream un ''Puntatore'', che punta ad una Struttura, passato da una funzione esterna===
Con la rev. #4978 è ora possibile dereferenziare un ''pointer'', che punta ad una Struttura esterna, passato da una funzione esterna - in modo più diretto: senza l'uso di Memory-Stream.
+
Con la rev. #4978 è ora possibile dereferenziare un ''Puntatore'', che punta ad una Struttura esterna, passato da una funzione esterna - in modo più diretto: senza l'uso di ''Memory-Stream'' <SUP>&#091;[[#Note|note 1]]&#093;</sup>.
 +
 
 +
Per questo argomento si rimanda alla seguente pagina: [[Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna]].
 +
 
 +
 
  
Per questo argomento si rimanda alla [[Dereferenziare_senza_Memory-Stream_un_pointer_ad_una_Struttura%2C_passato_da_una_funzione_esterna|specifica pagina]] sulla WIKI.
+
=Note=
 +
[1] Sull'uso dei ''Memory Stream'' in generale vedere la seguete pagina: [[Definizione ed uso dei Memory Stream]].

Versione attuale delle 09:37, 5 ago 2023

Passare una Struttura ad una Funzione esterna

Può accadere che nell'uso di funzioni esterne si debba a loro passare delle Strutture, affinché siano rempite di valori che il programma Gambas dovrà successivamente gestire, oppure per trasmettere alle funzioni medesime dei valori presenti nei campi delle Strutture.

Supponiamo, quindi, di avere una funzione esterna (presente ovviamente in una determinata Libreria che qui come esempio fingiamo si chiami "miaLibreria) che appunto preveda come parametro una Struttura. Supponiamo altresì che il nome di tale Struttura modello sia: NomeStruttura.
Nella dichiarazione della funzione esterna con Extern dovrà essere posto il nome della Struttura modello, mentre nella funzione, quando la si utilizzerà effettivamente in una routine, andrà posto il nome della variabile particolare della Struttura, che ai fini di questo esempio chiameremo: variabileStruttura.

' Dichiara la Struttura modello:
Public Struct NomeStruttura
   membro1 As Byte
   membro2 As Short
   membro3 As Integer
 End Struct

' Crea la variabile Struttura particolare:
Private variabileStruttura As New NomeStruttura


' Dichiara la Libreria che contiene la funzione esterna:
Library "miaLibreria"

' Dichiara la funzione esterna che andrà ad utilizzare:
Private Extern funzione_esterna(varSt As NomeStruttura)


Public Sub Main()

' Se si devono passare alla Funzione esterna dei valori per mezzo della Struttura, allora nella routine i membri della Struttura dovranno essere ovviamente riempiti prima della funzione esterna.

' Utilizza la funzione esterna:
 funzione_esterna(variabileStruttura)

' Se, invece, è la Funzione esterna ad avere il compito di riempire i membri della Struttura, allora i valori contenuti dai campi della Struttura potranno essere raccolti ovviamente solo dopo la funzione esterna.

End


Funzione esterna che ritorna una Struttura

La Funzione esterna potrà ritornare proprio una Struttura.

Esempio (usa per il riferimento alla Funzione esterna ed alla Struttura le denominazioni del precedente paragrafo):

' Dichiara la Funzione esterna che ritornerà una "Struttura":
Private Extern funzione_esterna(varI As Integer, varB As Byte) As NomeStruttura

Public Sub Button1_Click()

 Dim vI as Integer
 Dim vB as Byte

 strutturaParticolare = funzione_esterna(vI, vB)

End


Dereferenziare senza Memory-Stream un Puntatore, che punta ad una Struttura, passato da una funzione esterna

Con la rev. #4978 è ora possibile dereferenziare un Puntatore, che punta ad una Struttura esterna, passato da una funzione esterna - in modo più diretto: senza l'uso di Memory-Stream [note 1].

Per questo argomento si rimanda alla seguente pagina: Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna.


Note

[1] Sull'uso dei Memory Stream in generale vedere la seguete pagina: Definizione ed uso dei Memory Stream.