Páginas

domingo, 29 de mayo de 2016

Gambas3: Uso de funciones Externas hechas en C

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,&param_ant);
  params = param_ant;
  params.c_lflag &= ~(ICANON|ECHO);
  params.c_cc[4] = 1;

  ioctl(STDINFD,TCSETA,&params);

  fflush(stdin); fflush(stderr); fflush(stdout);
  read(STDINFD,&c,1);

  ioctl(STDINFD,TCSETA,&param_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