Hola
No conozco mucho ni C ni C++, aunque me encuentro en la situación de tener que hacer una librería para comunicar Java con una DLL existente, pero no consigo que funcione.
Esta es la clase Java:
==================================
package afta;
public class DllBridge {
public DllBridge() {
}
public native void ServerOnOff(boolean OnOff);
}
====================================
Esta es la cabecera generada por javah:
=====================================
#include <jni.h>
#ifndef _Included_afta_DllBridge
#define _Included_afta_DllBridge
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_afta_DllBridge_ServerOnOff
(JNIEnv *, jobject, jboolean);
#ifdef __cplusplus
}
#endif
#endif
================================================== =
Y esta es la firma de la librería que ya tengo y que quiero acceder desde Java. En principio para ver que funciona sólo quiero tener acceso a la función ServerOnOff (he usado PE Explorer para obtener estos datos):
================================================== ==
//Version: 53.0
FP100;
GUID = {01F3BA52-3A11-4C8F-8F82-14454C2E360E};
Dispatch _Server;
GUID = {75ECF369-65C3-4CB3-BB25-CD78497099C0};
function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
function AddRef: UI4; stdcall;
function Release: UI4; stdcall;
function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2;pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo:^EXCEPINFO; out puArgErr: ^UINT); stdcall;
function CompararHuella(IPTerminal: BSTR; huella: BSTR): BSTR; stdcall;
function CapturaHuella(IPTerminal: BSTR): BSTR; stdcall;
function GrabaEeprom(IPTerminal: BSTR; Posicion: BSTR; Valor: BSTR): BSTR; stdcall;
function LeeEeprom(IPTerminal: BSTR; Posicion: BSTR): BSTR; stdcall;
function DisplayMensaje(IPTerminal: BSTR; PosX: I2; PosY: I2; Mensaje: BSTR): BSTR; stdcall;
function GrabaSeguridad(IPTerminal: BSTR; Valor: BSTR): BSTR; stdcall;
function LeeSeguridad(IPTerminal: BSTR): BSTR; stdcall;
function VersionFingerprint(IPTerminal: BSTR): BSTR; stdcall;
function VersionTerminal(IPTerminal: BSTR): BSTR; stdcall;
function EsperarTecla(IPTerminal: BSTR): BSTR; stdcall;
function RecibirEntradas(IPTerminal: BSTR): BSTR; stdcall;
function EnviarEntradas(IPTerminal: BSTR; Valor: BSTR): BSTR; stdcall;
function ResetTerminal(IPTerminal: BSTR): BSTR; stdcall;
function TerminalConectado(IPTerminal: BSTR): BSTR; stdcall;
function ConnectTerminal(IPTerminal: BSTR; Puerto: BSTR): BSTR; stdcall;
function DisconnectTerminal(IPTerminal: BSTR): BSTR; stdcall;
function ServerOnOff(OnOff: Bool): Variant; stdcall;
function Mostrar_error(ResultadoOP: BSTR; MostrarMsg: Bool): BSTR; stdcall;
CoClass Server;
GUID = {E95E09C3-36A8-44AD-8FD6-B9B857F2AB4C};
Dispatch __Server;
GUID = {043DDBF3-7FAF-423A-A5E7-B1810D1D2392};
function PeticionAcceso(IPTerminal: BSTR; Datos: Variant); stdcall;
=========================================
Y este es el archivo cpp que he empezado a hacer:
==========================================
#include <jni.h>
#include "afta_DllBridge.h"
#import "FP100.dll"
JNIEXPORT void JNICALL Java_afta_DllBridge_ServerOnOff (JNIEnv *, jobject, jboolean value2) {
printf("Hello Compiling CPP file !!!! ");
return;
}
=========================================
¿Podrías ayudarme a ver qué es lo que hay que poner en el cpp para llamar a la función de la DLL?
Un saludo y gracias por adelantado.