Funciones C con EGL

Los programas EGL pueden invocar funciones C.

Para invocar una función C desde EGL:

Después de identificar las funciones C para utilizarlas en el programa EGL, debe:
  1. Descargar en el sistema la biblioteca de pila EGL y el archivo de objeto de aplicación del sitio Web de IBM.
  2. Compilar todo el código C en una biblioteca compartida y enlazarla con la biblioteca de pila específica de plataforma adecuada.
  3. Crear una tabla de función.
  4. Compilar la tabla de función y el archivo de objeto de aplicación específico de plataforma adecuado en una biblioteca compartida y enlazar esta biblioteca compartida con la biblioteca compartida creada en el paso 2 y la biblioteca de pila.

1. Descargar la biblioteca de pila EGL y el archivo de objeto de aplicación

Para descargar la biblioteca de pila EGL y el archivo de objeto de aplicación:
  1. Vaya al el sitio Web de soporte de EGL.
    • El URL de Rational Application Developer es:
      http://www3.software.ibm.com/ibmdl/pub/software/rationalsdp/rad/60/redist
    • El URL de Rational Web Developer es:
      http://www3.software.ibm.com/ibmdl/pub/software/rationalsdp/rwd/60/redist 
    .
  2. Descargue el archivo EGLRuntimesV60IFix001.zip en el directorio que prefiera.
  3. Desempaquete el archivo EGLRuntimesV60IFix001.zip para identificar los archivos siguientes:
Para las bibliotecas de pila específicas de la plataforma: .
Para los archivos de objeto de aplicación específicos de la plataforma: .

2. Compilar todo el código C en una biblioteca compartida

El código C recibe valores de EGL utilizando funciones externas de recepción y devuelve valores a EGL utilizando funciones externas de devolución. Las funciones externas de extracción se describen en el apartado Recibir valores de EGL; las funciones externas de devolución se describen en el apartado Devolver valores a EGL.

Para compilar todo el código C en una biblioteca compartida:
  1. Utilizando métodos estándar, compile todo el código C en una biblioteca compartida y enlácelo con la biblioteca de pila EGL específica de plataforma adecuada.
  2. En los ejemplos específicos de plataforma siguientes, file1.c y file2.c son archivos C que contienen funciones invocadas por EGL.

    En AIX (el mandato ld debe estar en una sola línea):
    cc -c -Iincl_dir  file1.c file2.c
    ld -G -b32 -bexpall -bnoentry 
       -brtl file1.o file2.o -Ldir_bib_pila 
       -lstack -o nombre_lib1 -lc

    En Linux (el mandato gcc debe estar en una sola línea):
    cc -c -Iincl_dir  file1.c file2.c
    gcc -shared file1.o file2.o -Ldir_bib_pila
        -lstack -o nombre_lib1

    En Windows (el mandato de enlace debe estar en una sola línea):

    cl /c -Iincl_dir file1.c file2.c 
    link /DLL file1.obj file2.obj 
         /LIBPATH:dir_bib_pila 
         /DEFAULTLIB:stack.lib /OUT:nombre_bib1
    incl_dir
    la ubicación del directorio de los archivos de cabecera.
    dir_bib_pila
    La ubicación del directorio de la biblioteca de pila.
    nombre_bib1
    el nombre de la biblioteca de salida.
Nota: Si el código C utiliza cualquiera de las funciones de biblioteca ESQL/C de IBM Informix (BIGINT, DECIMAL, DATE, INTERVAL, DATETIME), entonces también debe enlazarse la biblioteca ESQL/C.

3. Crear una tabla de función

La tabla de funciones es un archivo fuente C que incluye los nombres de todas las funciones C que debe invocar el programa EGL. En la tabla de funciones siguiente, por ejemplo, c_fun1 y c_fun2 son nombres de funciones C. Todas las funciones identificadas en el código deben haberse exportado desde la biblioteca C creada en el paso 2 anterior.

#include <stdio.h>
struct func_table {

      char *fun_name;
      int (*fptr)(int); 
};

extern int c_fun1(int);
extern int c_fun2(int);
/* Prototipos parecidos para otras funciones */

struct func_table ftab[] =
            {
                 "c_fun1", c_fun1,
                 "c_fun2", c_fun2,
                 /* Igualmente para otras funciones */
                 "", NULL
            };  

Cree una tabla de funciones basada en el ejemplo anterior y puéblela con las funciones C adecuadas. Indique el final de la tabla de funciones con "", NULL.

4. Compilar la tabla de funciones y el archivo de objeto de aplicación específico de plataforma en una biblioteca compartida

El archivo de objeto de aplicación es la interfaz entre el código EGL y el código C.

Los dos artefactos siguientes deben compilarse en una biblioteca compartida y enlazarse con la biblioteca de pila y la biblioteca creada en el paso 2 anterior:

Compile la biblioteca compartida nueva utilizando el ejemplo siguiente, donde ftable.c es el nombre de la tabla de función y mylib es el nombre de la biblioteca compartida C creada en el paso 2 y lib_dir es la ubicación para mylib. Especifique lib2_name utilizando la propiedad dllName o la propiedad de tiempo de ejecución Java vgj.defaultI4GLNativeLibrary.

En AIX (el mandato ld debe estar en una sola línea):

cc -c  ftable.c
ld -G -b32 -bexpall -bnoentry 
   -brtl ftable.o application.o 
   -Lstack_lib_dir -lstack -Llib_dir 
   -lmylib -o lib2_name -lc

En Linux (el mandato gcc debe estar en una sola línea):

cc -c  ftable.c
gcc -shared ftable.o application.o 
    -Lstack_lib_dir -lstack -Llib_dir 
    -lmylib -o lib2_name

En Windows (el mandato link debe estar en una sola línea):

cl /c ftable.c
link /DLL ftable.obj application.obj 
     /LIBPATH:stack_lib_dir 
     /DEFAULTLIB:stack.lib 
     /LIBPATH:lib_dir 
     /DEFAULTLIB:mylib.lib /OUT:lib2_name

Enlace las tres bibliotecas entre sí.

Con la biblioteca compartida C, la tabla de función y la biblioteca de pila enlazadas, ahora puede invocar las funciones C desde el código EGL. Para obtener información acerca de cómo invocar una función C en EGL, consulte el apartado Invocar una función C desde un programa EGL.

Concepto relacionado
Componente de opciones de enlace

Consulta relacionada
Funciones BIGINT para C
Tipos de datos C y tipos primitivos EGL
Funciones DATE para C
Funciones DATETIME e INTERVAL para C
Funciones DECIMAL para C
Invocar una función C desde un programa EGL
Funciones de devolución para C
Funciones de pila para C

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.