C++ applikation, JNI

illaX

Erfahrenes Mitglied
Hi,

ich habe ein C++ Programm und moechte dies in einem Java-Programm ausfuehren. Nun habe ich mit Visual Studio 2003 ein "MFC DLL" Projekt angelegt und dort testweise eine Methode erstellt

source
Code:
bool CNativeDLLApp::test(bool value) {
	if(value)
		return true;
	return false;
}

header
Code:
class CNativeDLLApp : public CWinApp
{
public:
	CNativeDLLApp();

	bool test(bool value);

// Overrides
public:
	virtual BOOL InitInstance();
	DECLARE_MESSAGE_MAP()
};

Dann habe ich die Klasse in java erstellt
Code:
public class NativeDll {
    public NativeDll() {
        super();
        System.loadLibrary("NativeDLL");
    }

    public native boolean test(boolean value);
    public native boolean InitInstance();
    public native boolean CNativeDLLApp();
}

In meinem main erzeuge ich eine neue Instanz von NativeDll und rufe die methode test(boolean) auf. Nun kommt immer die Fehlermeldung:
java.lang.UnsatisfiedLinkError: test
at nativ.NativeDll.test(Native Method)

Kann mir jemand weiterhelfen was dies bedeutet?

Danke
 
Hallo!

Um in Java mit JNI zu arbeiten musst du schon den vorgegebenen Weg gehen.
Java Klasse schreiben welche die native Methoden deklarationen enthaelt. Javah verwenden um passende C-Header Dateien zu erstellen. Anschliessend musst du die (unter Windows) ein eine neues dll Projekt erstellen, in welches du die generierte Header Datei einfuegst und entsprechend implementierst.

Schau mal hier:
http://www.tutorials.de/forum/java/238261-prozessorlast-auswerten.html

Gruss Tom
 
Danke Thomas,

ich habe den ganzen Tag dran rumgefuchst und nun laeuft es. Kann es sein das ich noch nicht einmal das package aendern darf?
 
Oh Herr im Himmel,

der einzigste Fehler war das mit den packages. Achtung leute wenn ihr javah ausfuehrt dann nicht in dem Verzeichnis wo die main Klasse liegt, sondern im src, sonst beachtet er die Packete nicht und dann kann er speater die Klassen nicht finden.

Es laeuft :D

Danke Danke
 
Zurück