Autore Topic: CallBack di una Funzione di Gambas da una libreria esterna scritta in C  (Letto 194 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 21 Febbraio 2021, 20:01:46 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:CallBack di una Funzione di Gambas da una libreria esterna scritta in C
« Risposta #1 il: 20 Febbraio 2021, 01:20:09 »
Bravissimo Martin P. Cristia (tercoide) nel aver trovato la soluzione con il Puntatore a Funzione in C.

Vi mostro una semplificazione/precisazione dei suoi due codici:
Codice: [Seleziona]
Library "/tmp/libesterna"

' int funz_C(int n, void (*cbGambas) (int))
Private Extern funz_C(num As Integer, CallbackFunction As Pointer) As Integer


Public Sub Main()

  Dim p As Pointer
  Dim err As Integer
 
  creaso()
 
' Assegna l'indirizzo di memoria della funzione "cbGambas" del progetto ad una variabile di tipo Puntatore:
  p = cbGambas
 
' Invoca la funzione "funz_C" presente nel codice della ibreria esterna scritta in C:
  err = funz_C(10, p)
  If err <> 0 Then Error.Raise("Errore !")

End


Public Function cbGambas(num As Integer)
 
  Print num
 
End


Private Procedure creaso()
 
  File.Save("/tmp/libesterna.c", "int funz_C(int n, void (*cbGambas) (int)) {   /* il 2° parametro è un Puntatore a Funzione ! */\n\n" &
  "   int i;\n\n" &
  "   for (i=1;i<=n;i++)\n" &
  "      cbGambas(i);   /* Invoca la funzione del progetto Gambas */\n\n" &
  "   return 0;\n\n}")
 
  Shell "gcc -o /tmp/libesterna.so /tmp/libesterna.c -shared" Wait
 
End
« Ultima modifica: 21 Febbraio 2021, 20:02:10 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 21 Febbraio 2021, 20:02:29 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »