Los programas EGL pueden invocar funciones C.
Para invocar una función C desde EGL:
1. Descargar la biblioteca de pila EGL y el archivo de objeto de aplicación
http://www3.software.ibm.com/ibmdl/pub/software/rationalsdp/rad/60/redist
http://www3.software.ibm.com/ibmdl/pub/software/rationalsdp/rwd/60/redist
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.
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
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
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.
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
Devolver valores a EGL
Recibir valores de EGL