Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: AFelipeTrujillo en 17 Febrero 2010, 18:59 PM

Título: [APORTE by 4ng3r]Java, C y DLL
Publicado por: AFelipeTrujillo en 17 Febrero 2010, 18:59 PM
JAVA, DLL y C

Un saludo a todos en la comunidad, ya pude hacer mi programita que tantas canas me saco.... pero en fin


Les recuerdo: Hacer dos programas y se comuniquen por medio de librerías dinamias o DLL. El ejercicio trata de instanciar un arreglo de enteros con un dimensión de 5000 y en cada espacio agregar un numero radom de 0 a 60000  :xD y en su salida imprimir estos numeros en orden ascendente. La cuestion es que el arreglo se debe  instanciar en C o C++ (use C), el arreglo lo recibe un programa en java y este los ordena y después el programa en java envia el arreglo en orden a C y este los imprime. (Facil no???  ='()

Bueno, para empezar con la solución al problema empeze leyendo todo lo referente al JNI (http://es.wikipedia.org/wiki/Java_Native_Interface) pero igual no me daban tantas ideas que digamos... pero en si lo esencial del estudio es que JAVA manejo un su JDK una carpeta ubicada en  %JAVAROOT%/BIN un programa  llamado javah.exe. Este programa apartir de un .class crear un .h para manejarlo desde C.

Estos son los pasos para la solución al problema. jejee pero solo voy hacer el hola mundo y de hay en adelante es googlear y leer este manual y podran sacar el ejercicio anterior:





Código (java) [Seleccionar]
public class HolaMundoJNI{

public native void muestraHolaMundo(); //invocamos el Metodo NATIVO

public static void main (String arg []){

HolaMundoJNI  test = new HolaMundoJNI ();
test.muestraHolaMundo();
}

static {
System.loadLibrary("libreria"); // Cargamos la Libreria DLL generada mas Adelante ;)
}


}
(http://img13.imageshack.us/img13/536/dibujomzl.jpg)

NOTA: Si no sale algun error, el compilador señalara la linea el comando que esta mal dentro de codigo

Después de haberlo compilado, pasamos a crear el archivo de cabecera o mas conocido como .h. Para esto debemos ejecutar una herramienta que lleva el JDK que se llama javah -jni y se aplica sobre el .class creado anteriormente.

(http://img15.imageshack.us/img15/2351/dibujovftyxi.jpg)

Si observamos la carpeta donde estamos generando cada uno de los archivos podemos contar; un .class y un .h con el mismo nombre del .java, en mi caso HolaMundoJNI.java  =O

ESTE ES EL ARCHIVO HOLAMUNDOJNI.H

[/list]/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HolaMundoJNI */

#ifndef _Included_HolaMundoJNI
#define _Included_HolaMundoJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HolaMundoJNI
* Method:    muestraHolaMundo
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HolaMundoJNI_muestraHolaMundo
 (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif





[/list]


LINK (http://angercode.wordpress.com)



Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: Leyer en 18 Febrero 2010, 01:10 AM
hee esto es basico pero esta bien explicado es un buen aporte para los novatos en JNI

Un Saludo!
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: Amerikano|Cls en 18 Febrero 2010, 03:56 AM
Aportaso men!!!! me sera de gran utilidad para incursionar en el JNI ... mil gracias  ;-) ;-) ;-)
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: AFelipeTrujillo en 18 Febrero 2010, 22:56 PM
0k gracias espero que sea de gran aporte !!
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: kasiko en 25 Febrero 2010, 20:49 PM
Se agradece la ayuda  ;-)
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: trachtenberg en 30 Septiembre 2011, 18:38 PM
Gracias por el aporte =)
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: trachtenberg en 30 Septiembre 2011, 18:44 PM
hay algo que no me funciono bien al final al ejecutar  java HolaNativo(asi su nombre )


Exception in theard "main" java.lang.unsupportedCalssVersionError:HolaNativo:
Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HolaNativo.  Program will exit.


lei que puede se el set CLASSPATH ..
toy haciendo pruebas
Título: Re: [APORTE by 4ng3r]Java, C y DLL
Publicado por: trachtenberg en 30 Septiembre 2011, 20:57 PM
Cita de: trachtenberg en 30 Septiembre 2011, 18:44 PM
hay algo que no me funciono bien al final al ejecutar  java HolaNativo(asi su nombre )


Exception in theard "main" java.lang.unsupportedCalssVersionError:HolaNativo:
Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HolaNativo.  Program will exit.


lei que puede se el set CLASSPATH ..
toy haciendo pruebas

el problema era las versiones tenia 2 diferntes  por el netbeans y el CLASSPATH  _reistale todo