
Jni DLL v Javě
Potřebuju napsat program v javě, který volá metody dllka.
1. Prográmek Lcoew32.java:
public class Lcoew32 {
public static native void LceGetSessionId();
static {
try {
System.loadLibrary("Lcoew32");
System.out.println("Dll bylo načteno");
}
catch (Exception e) {
System.out.println("Nepodařilo se načíst dll");
System.exit(-1);
}
}
/**
* @param args
*/
public static void main(String[] args) {
LceGetSessionId();
}
}
2. Přeložím ho pomocí javac.
3. Vygeneruju hlavičkový soubor LCOEW32.h pomocí javah:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Lcoew32 */
#ifndef _Included_Lcoew32
#define _Included_Lcoew32
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Lcoew32
* Method: LceGetSessionId
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Lcoew32_LceGetSessionId
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
4. Program LceGetSessionID.c:#include <windows.h>
#include "LCOEW32.H"
#include <stdio.h>
JNIEXPORT void JNICALL Java_Lcoew32_LceGetSessionId(JNIEnv *env, jclass cls) {
printf("Sláááááva, funguje to!!!!");
return;
}
5. Zkompiluju Céčkový program.6. Spustím java Lcoew32
Dll bylo načteno
Exception in thread "main" java.lang.UnsatisfiedLinkError: Lcoew32.LceGetSessionId<>V
at Lcoew32.LceGetSessionId<Native Method>
at Lcoew32.main<lcoew32.java:19>
Co s tím? Path mám nastavený na adresář s vytvořeným dll. Navíc počítám, že kdyby se dll nenačetlo, tak by to spadlo na výjimku a nevypsalo by mi to, že bylo načteno. Takže tady podle mne chyba asi nebude. Fakt nevím, co s tím
