Include de c con java
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
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
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...
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...
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...
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...