Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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 :.(

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tu classu Lcoew32 mas v nejakom inom packagi ako v defaultnom? ak ano, header musis vygenerovat plny…
emem 14.03.2008 20:18
emem
Ještě mne napadlo - to Céčko kompiluju v Dev-C++ jako dll. Skutečně to vytvoří dll soubor. Nemá se a…
Anicka 17.03.2008 16:33
Anicka
Sice už je trochu pozdě, ale třeba by se to někomu mohlo hodit. Při použití MingW jsem musel nastavi… poslední
emis-cz 10.08.2011 11:47
emis-cz

Sice už je trochu pozdě, ale třeba by se to někomu mohlo hodit. Při použití MingW jsem musel nastavit kompilátoru následující parametry "-Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at". Dá se to zkontrolovat přímo v DLL-Souboru. Bez těchto parametrů tam bylo např: ..._initEasyData@8, až když jsem je přidal, tak @8 zmizelo a Java mi tu funkci initEasyData našla.

Zpět do poradny Odpovědět na původní otázku Nahoru