Differenze tra le versioni di "Verificare quali dati Gambas passa ad una funzione esterna"

Da Gambas-it.org - Wikipedia.
Riga 5: Riga 5:
  
 
La libreria esterna in C sarà così costituita:
 
La libreria esterna in C sarà così costituita:
 +
#include <stdio.h>
 +
 +
 
  void verifica(unsigned char *p) {
 
  void verifica(unsigned char *p) {
 
   
 
   
 
   int  i;
 
   int  i;
 
   
 
   
   printf("Valore puntatore: %x;\n dump:", (int) p);
+
   printf("Valore puntatore: %x;\n dump:", (int) *p);
 
   
 
   
 
   for (i=0; i<8; i++)
 
   for (i=0; i<8; i++)

Versione delle 01:22, 13 giu 2014

Per sapere quali dati Gambas invia ad una funzione esterna, dovremo servirci di un'apposita libreria esterna in C che ci restituirà i risultati dei dati effettivi passati da Gambas. In tal modo sarà possibile verificare se Gambas invia ad una funzione esterna ualsiasi i dati corretti.


Nell'esempio, che utilizzeremo in questa pagina, abbiamo un apllicativo Gambas che riempie una Struttura ed una variabile vettoriale con alcuni dati. L'applicativo, poi, passerà ad una funzione della predetta libreria esterna, da noi realizzata, per la verifica dei dati effettivamente passati.

La libreria esterna in C sarà così costituita:

#include <stdio.h>


void verifica(unsigned char *p) {

  int   i;

  printf("Valore puntatore: %x;\n dump:", (int) *p);

  for (i=0; i<8; i++)
     printf("  %2.2x  ", *p++);
  
     printf("\n\n");

}

Il file di tale codice C sarà salvato e posto nella cartella Dati dell'aplicativo Gambas.


Il codice dell'applicativo Gambas sarà a sua volta il seguente:

Public Struct prova
  a As Byte
  b As Short
  c As Integer
End Struct

Private pr As Struct Prova


Library "/tmp/libverifica"
Private Extern verifica(p As Prova)


Private vett[10] As Byte


Public Sub Main()

 Dim po As Pointer


' Genera l'apposita libreria esterna per la verifica:
  Shell "gcc -fPIC -o /tmp/libverifica.so " & Application.Path &/ "libverifica.c -shared"

' Assegnamo dei valori ai campi della Struttura:
  With pr
    .a = 44
    .b = 444
    .c = 44444
  End With

' Assegnamo due valori a due rispettivi elmenti del vettore:
  vett[0] = 5
  vett[4] = 10
   
 
' Vengono mostrati in console i risultati:
  verifica(VarPtr(pr))
  verifica(pr)
   
  po = VarPtr(vett)
  verifica(po)
  verifica = vett.Data
  verifica(po)

End