Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Acceso a DLL mediante JNI

Estas en el tema de Acceso a DLL mediante JNI en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/02/2007, 18:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 2
Antigüedad: 17 años, 3 meses
Puntos: 0
Acceso a DLL mediante JNI

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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:35.