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 * env, jobject interpObj, jstring jFileName,
jint jColorSmooth, jint jBlackOption)
{
const char *sFile = env->GetStringUTFChars(jFileName, 0);
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 FileName, int ColorSmooth, int BlackOption);
public Test() {}
// Main
public static void main(String[] args)
{
try {
int retorno = test.YMCKO("c:\\Densite1.bmp", 0, 0);
} 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 *, jobject, jstring, jint, jint);
#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.