Include de c con java

kvelamazan
03 de Febrero del 2005
Hola:

Ayer me contestasteis en el foro de Java de www.programacion.com.

Quería preguntar una cosa, entonces si yo tengo mi .h el cual tiene las cabeceras de unas funciones, por ejemplo, yo si creo un programa de c

Llamo a mi include

#include "loqtts.h"

...

Llamo a una función de ese include

err = ttsNewInstance(&hInstance, NULL, NULL);

entonces si yo quiero hacer esto en java seria así

class LoquendoLoad

{

public native void ttsNewInstance();
static
{

// Cargamos la libreria

System.loadLibrary("loqtts");

}

}

O tendria que hacerlo creando un nuevo .h con javah e implemetarlo?

Muchas gracias por la ayuda.

Un saludo

Carolina











Lemony Snicket
03 de Febrero del 2005
Hola,...

La verdad es que no entiendo bien a qué te refieres. De todas formas te contesto. El modo correcto de proceder sería mapear todas las cabeceras de los métodos contenidos en tu librería de C en una clase que funcionaría a modo de interfaz sin llegar a serlo. Luego sólo tendrías que instanciar dicha clase desde donde te hiciera falta e invocar el método correspondiente ...

public class MiLibreriaExterna{

public native void miMetodo1(Argumentos);
public native tipo1 miMetodo2(Argumentos);
public native tipo2 miMetodo3(Argumentos);

static {
System.loadLibrary("miLibreria");
}

}

public class Llamante{

public static void main (String arg[]){

MiLibreriaExterna m = new MiLibreriaExterna();
m.miMetodo1();
}

}

Espero haber aclarado tu duda. Un saludo...

Lemony Snicket
03 de Febrero del 2005
Para no mezclar en este post nuevo te explico el procedimiento que debes seguir con la librería C.

1) Compilar MiLibreriaExterna.java con

javac MiLibreriaExterna.java

2) Generar el fichero de cabeceras (.h) con...

javah MiLibreriaExterna

Con esta instrucción el compilador genera un archivo .h cogiendo del compilado (.class) generado previamente las declaraciones de métodos con el modificador native que se hubieran incluido en la clase. El nombre del fichero .h generado dependerá del paquete en el que se ubique la clase. Así, si el paquete fuera p1.p2.p3 el nombre del fichero generado sería p1_p2_p3_MiLibreriaExterna.h e igual para las cabeceras generadas p1_p2_p3_MiLibreriaExterna_miMetodo1();

3)Generar los stubs (el fichero .c) con

javah -stubs p1_p2_p3_MiLibreriaExterna

Se generará un fichero p1_p2_p3_MiLibreriaExterna.c con la "traducción" de las cabeceras Java native a algo comprensible para C.

4) Escribir tu código en C de los métodos nativos utilizando el .h generado...

<#include p1_p2_p3_MiLibreriaExterna.h>

Espero haberlo aclarado. De todas formas no te será difícil encontrar información al respecto en Google con ejemplos probablemente mucho más útiles y claros.

Un saludo...