Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/08/2005, 07:51
Avatar de Ani Alamo
Ani Alamo
 
Fecha de Ingreso: julio-2005
Mensajes: 35
Antigüedad: 19 años, 7 meses
Puntos: 1
Usa JNI

Para trabajar con fuentes externas, tales como las DLLs de un propietario debes tomar en cuenta lo siguiente, si por ejemplo la DLL fue hecha en C:

1. Así como recibes el fichero DLLExtern.dll, deberás recibir un fichero DLLExterna.h, donde verás los métodos externos que pueden ser usados por aplicaciones externas, por ejemplo:


extern int YMCKO(char *FileName, int ColorSmooth, int BlackMode);



2. Debes crear una DLL llamada "Test.dll" , una DLL intermedia que invoque a dicha DLL de propietario, pera esta nueva DLL debes crearla usando JNI, de la siguiente manera:

Código PHP:

// Test.cpp : Defines the entry point for the DLLExtern application.

#include "stdafx.h"
#include "stdio.h"
#include "jni.h"
#include "jni_md.h"
#include "DLLExtern.h"


JNIEXPORT jint JNICALL Java_myPackage_Test_YMCKO
 
(JNIEnv envjobject interpObjjstring jFileName,
  
jint jColorSmoothjint jBlackOption)
{
    const 
char *sFile env->GetStringUTFChars(jFileName0);    
    
char FileName[100];
    
strcpy(FileName,(char*)sFile);
    
returnValue YMCKO(FileName (int)jColorSmooth, (int)jBlackOption);
    return 
returnValue;


3. Creas una clase Java que invoque a los métodos nativos de tu DLL intermedia...

Código PHP:
package myPackage;
import java.io.*;
public class 
Test
{
  
// Native Methods 
  
public native int YMCKO(String FileNameint ColorSmoothint BlackOption);
  public 
Test() {}

  
// Main 
  
public static void main(String[] args
  {
    try {
      
int retorno test.YMCKO("c:\\Densite1.bmp"00);
    } catch (
Exception ex) {
      
System.err.println(ex.getMessage());
    }
  }
  static {
      
System.loadLibrary("Test");
  }

Y al compilar esta clase (Activando la Configuración del Compilador JNI - ACTIVANDO la opción de "Generar archivo de cabecera JNI")....
te genera un fichero .h... el cual debes incluirlo en tu código C.... como el mismo fichero DLLwithJNI.h... la cabecera ".h" generada tiene la siguiente forma:


Código PHP:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class myPackage_Test */

#ifndef _Included_myPackage_Test
#define _Included_myPackage_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     myPackage_Test
 * Method:  YMCKO
 */
JNIEXPORT jint JNICALL Java_myPackage_Test_YMCKO
  
(JNIEnv *, jobjectjstringjintjint);

#ifdef __cplusplus
}
#endif
#endif 
4. Entonces compilas tu DLL intermedia (la que usa JNI), y finalmente, la dejas en el System de tu Windows..... y listo a ejecutar tu aplicación.


5. Para más información revisa esta URL:
http://java.sun.com/docs/books/tutorial/native1.1

Un saludo.
__________________

Ani Alamo Gómez de González


"Sin Dios no soy nada en este mundo, sin El nada puedo ser... ni las hojas de los árboles se mueven, sino es por su gran poder. Bendito seas Señor."