Gambas3: Uso de funciones Externas
hechas en C
Si necesitamos potencia de cálculo, o usar algunas funciones de C, gambas3 permite usarlas mediante la orden librery y la declaración de la función externa
El el siguiente video vamos a ver como usar la funcion externa "inkey()" y como crear la libreria ".so"
1) Tenemos el siguiente programa en c: "kpress.c"
/***
* kpress.c
*
* (c) 2004 ackbar
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termio.h>
#include <sys/ioctl.h>
#define STDINFD 0
#undef getc
int inkey(void);
int main() {
int c;
printf("Presione una tecla: ");
c=inkey();
printf("Codigo ASCII de la tecla presionada: [%d] Caracter: [%c]\n",c,c);
return 0;
}
int inkey(void) {
char c;
struct termio param_ant, params;
ioctl(STDINFD,TCGETA,¶m_ant);
params = param_ant;
params.c_lflag &= ~(ICANON|ECHO);
params.c_cc[4] = 1;
ioctl(STDINFD,TCSETA,¶ms);
fflush(stdin); fflush(stderr); fflush(stdout);
read(STDINFD,&c,1);
ioctl(STDINFD,TCSETA,¶m_ant);
int v=c;
return v;
}
/* EOF: kpress.c */
2) Vamos a crear la libreria ".so"
$gcc -o libkpress.so kpress.c -shared -fPIC
3) En gambas3, vamos a usar la funcion "inkey()"
' Gambas module file
Library "/tmp/libkpress"
Private Extern inkey() As Integer
Public Sub Main()
Dim a As String
Print "Hello world"
Try Kill "/tmp/libkpress.so"
Try Copy "libkpress.so" To "/tmp/libkpress.so"
a = Chr$(inkey())
Print a
End
Nota:
Como podeis observar, el archivo "libkpress.so", esta en el directorio "Datos" del proyecto gambas, y se copia internamente al directorio /tmp para usarlo.
En este video se explican todos los pasos:
Código fuente: alojado en google drive