Differenze tra le versioni di "Passare a una funzione esterna un Puntatore che successivamente deve essere passato anche ad altre funzioni esterne"
Da Gambas-it.org - Wikipedia.
Riga 3: | Riga 3: | ||
Un esempio ne è la dichiarazione del primo parametro ''formale'' della funzione esterna di ALSA "snd_seq_open()": | Un esempio ne è la dichiarazione del primo parametro ''formale'' della funzione esterna di ALSA "snd_seq_open()": | ||
int snd_seq_open (snd_seq_t **handle, const char *name, int streams, int mode) | int snd_seq_open (snd_seq_t **handle, const char *name, int streams, int mode) | ||
− | che in Gambas sarà così dichiarata: | + | che in un codice in linguaggio C sarebbe così utilizzata concretamente: |
+ | snd_seq_open(<FONT Color=#B22222>&</font>ptr,...etc...); | ||
+ | in Gambas sarà così dichiarata: | ||
Private Extern snd_seq_open(<FONT Color=#B22222>handle As <B>Pointer</b></font>, ...etc...) As Integer | Private Extern snd_seq_open(<FONT Color=#B22222>handle As <B>Pointer</b></font>, ...etc...) As Integer | ||
e quindi così utilizzata: | e quindi così utilizzata: |
Versione attuale delle 09:26, 13 ott 2022
Se un parameto formale di una funzione esterna è definito come variabile di tipo Puntatore di Puntatore, affinché detta variabile deve essere mantenuta e passata ad altre funzioni esterne del codice, allora in Gambas tale parametro verrà dichiarato come Puntatore e poi nell'utilizzo concreto all'interno delle routine verrà passato preliminarmente alla funzione "VarPtr()".
Un esempio ne è la dichiarazione del primo parametro formale della funzione esterna di ALSA "snd_seq_open()":
int snd_seq_open (snd_seq_t **handle, const char *name, int streams, int mode)
che in un codice in linguaggio C sarebbe così utilizzata concretamente:
snd_seq_open(&ptr,...etc...);
in Gambas sarà così dichiarata:
Private Extern snd_seq_open(handle As Pointer, ...etc...) As Integer
e quindi così utilizzata:
Dim ptr As Pointer snd_seq_open(VarPtr(ptr), ...etc...)