Que se necesita para programar en java y c++ con JNI(JAVA NATIVE INTERFACE)?

Iniciado por hack-4-life, 3 Octubre 2010, 22:04 PM

0 Miembros y 2 Visitantes están viendo este tema.

hack-4-life

Buenas XD adentrandome al tema qusiera saber que necesito para programar con JNI,sigo leyendo acerca de enlazar java y C++,pero como lo enlazo? busque de JNA(JAVA NATIVE ACESS) en el foro que hay que descargar el .jar de JNA y que este paquete tengo que pegarlo  dentro de la ruta de la maquina virtual en jdk1.6.0_13\jre\lib\ext,pero no encontre de JNI me pregunto si es lo mismo.tengo los siguientes codes uno escrito en java y otro escrito en C++ si alquien me podria decir,se los agradeceria salu1+1...

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
    printf("Hello World!\n");
    return;
}



codigo de java

class HelloWorld {
    private native void print();
    public static void main(String[] args) {
        new HelloWorld().print();
    }
    static {
        System.loadLibrary("HelloWorld");
    }
}

pero al compilarlo me marca error en JNIEXPORT,si alguien me puede decir...saludos
""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"

Leyer

Asegurate de tener los archivos jni_md.h , jni.h en el directorio include , preferiblemente utiliza el DEV para generar una DLL ya que es mas fácil que los demás IDES.

Un saludo.

hack-4-life

gracias leyer por responder XD si tengo el dev c++ y esta instalado en el directorio C:\Dev-Cpp\include, y ya verifique que no estan las librerias,las descargue de stas paginas y las pegue en dev...C:\Dev-Cpp\include

aqui esta la libreria jni.h
http://xdprof.sourceforge.net/doxygen/jni_8h-source.html

y aqui esta la otra que me dijiste jni_md.h
http://xdprof.sourceforge.net/doxygen/jni__md_8h-source.html
volvi a compilar los archivos en C++ Y JAVA y no marca error,me dice que no such file directory,pero al ejecutar el archivo  no me lo ejecuta,que estoy haciendo mal :huh: :huh:
que mas me falta XD?thanxs x tu tiempo, espero tu respuesta... salu1+1

""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"

Leyer

Eso es todo lo que se necesita para JNI, recuerda cuando vallas a generar la DLL ya lo sabrás vas a File->New->Project->DLL y que para generar el header  .h es javac -jni class, sabiendo estas cosas ya podrías comenzar.

cualquier problema te guías por mi tutorial.
:http://foro.elhacker.net/java/tutorial_keylogger_en_java_jni-t275565.0.html

EDIT: te marca eso por que seguramente no este el archivo header "HelloWorld.h"

Un saludo.

hack-4-life

primero vi el link que enviaste y descargue las librerias de tu tutorial y las pegue en include, y si tienes razon todavia no genero el archivo HelloWork.h,pero mira vi tu tutorial,y me estoy guiando  de ahi, pero cuando intento compilar mi archivo HelloWorld.java me dice que no encuentra el comando javah -jni te pongo una imagen mejor...
que esta pasando?en que estoy mal y sabes se que son preguntas tontas,pero mas vale"ser tonto por un minuto que ser tonto toda la vida" estoy configurando la variable path para jni aver si es eso,leyendoo saludos XD
""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"

Leyer

Tienes que tener instalado algún JDK para poder usar javah, y tienes que configurarlo en el PATH de tu sistema para poder ejecutar javah desde la consola.

Claro puedes entrar directamente por la consola al directorio bin del JDK y compilar desde hay.

Un saludo.

hack-4-life

gracias por tu respuesta y por tu time,pero si tengo instalado el jdk_1.5 XD,solo me falta el path,voy a configurar la variable de entorno yte vengo a decir,ahora que ya se los pasos le intentare hasta MORIR,jaja saludos XD
""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"

danielo-

No hace falta que lo descargues de ningun lado, si ya tienes instalado el jdk, basta con irte al directorio donde esta instalado, luego en la carpeta include y ahi te encontraras con 3 cabezeras .h  y una carpeta llamada win32 (suuponiendo que trabajas bajo windows) dentro de la carpeta win32 hay otras 2 cabezeras.h, entonces copia las 5 cabeceras en la carpeta include del devc++ y ya deberias poder compilar el  proyecto.
* En la carpeta del include del dev++ deberas copiar los siguientes 5 cabeceras:
classfile_constants.h
jawt.h
jdwp.h
Transport.h
jni.h
jvmti.h

(realmente no se si se necesitan las 5, pero como soy flojo para checar cual hace falta y cual no , pues copie las 5 y funciona a la perfeccion XD)

Saludos!

hack-4-life

gracias por responder XD,hice lo que me dijiste XD pero la de  transport.h aparece con el nombre de jdwpTransport.h y la classfile_constants.h no la tiene tengo instalado el jdk_1.5,pero que crees ya la baje de google pero son varias y no se cual sea la correcta,cres que haya algun problema si no la tengo?bueno voy a revisarlo aver que pasa,y te vengo a decir saludos XD
""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"