RE:Llamar a los metods de una dll en .net desde ja
Hola:
Bueno, no se como será en .NET pero no debe haber mucha diferencia -pienso yo- ya que tambien genera codigo nativo, esta diferencia se daria al momento de incluir las cabeceras, ya que en C/C++ es #include. En resumen tendrias que incluir algunas cabeceras en tu codigo de .NET y compilarlas poniendo la ruta de estas. Por ejemplo:
Creas tu fichero .java y lo compilas normal:
class HolaMundo
{
private native void imprimir();
public static void main(String[] args)
{
new HolaMundo().imprimir();
}
static
{
System.loadLibrary("Hola");
}
}
Luego tienes que crear la cabecera para ese .class, haciendo:
javah -jni HolaMundo
Y finalmente la implementacion del codigo nativo(aquí si puede variar ya que esto esta en C)
#include <jni.h>
#include <stdio.h>
#include "HolaMundo.h"
JNIEXPORT void JNICALL
Java_HolaMundo_imprimir(JNIEnv *env, jobject obj)
{
printf("Hola Mundo!\n");
}
La idea aqui es que incluyas las cabeceras jni y la creada por el "javah" anterior, y claro el "JNIEXPORT void JNICALL". En la declaracion de la funcion debe ir Java_"NombreClase"_"MetodoNativo"(...), donde "NombreClase" debe ser la misma de tu clase hecha en codigo java y "MetodoNativo", el mismo nombre que le pusiste al metodo nativo en el codigo java(native void imprimir()). Eso seria casi todo.
Ahora al momento de crear la dll, tienes que darle la ruta del "jni.h", la cuales estan en el jdk: "C:\Archivos de programa\Java\jdk1.6.0\include" y "C:\Archivos de programa\Java\jdk1.6.0\include\win32", bueno dos rutas ya que la cabecera jni.h depende de otras que se encuentran dentro de la 2da ruta. Estas rutas tienes que pasarselas al compilador al momento de crear la dll y ya depende de los parametros que tenga el compilador(en este caso de .NET).
Ahora si, ejecutas el .class como cualquier codigo java y deberia imprimir:
HolaMundo!
Espero haberte ayudado.
Saludos.