PB-DLL-Funktion via JNI in Java aufrufen

Fragen zu allen anderen Programmiersprachen.
#Ton
Beiträge: 11
Registriert: 30.03.2013 11:57

PB-DLL-Funktion via JNI in Java aufrufen

Beitrag von #Ton »

Hallo,

Ich habe folgendes Problem:

Ich habe eine PB-DLL names "test.dll", welche ich zwar erfolgreich laden kann, jedoch die Funktion test() nicht aufrufen kann.
Dabei bekomme ich folgende Errormessage bei Eclipse:
"Exception in thread "main" java.lang.UnsatisfiedLinkError: Controller.test()I
at Controller.test(Native Method)
at Controller.main(Controller.java:12)"

Java Quellcode:

Code: Alles auswählen

public class Controller
{
	static {System.loadLibrary("test");}
	
	public native int test();
	
	
	// Main()
	public static void main(String[] args) throws InterruptedException
	{
		Controller t = new Controller();
		System.out.println(t.test());
	}
	
	
	// Constructor()
	public Controller() throws InterruptedException
	{
		
	}

}

PureBasic Quellcode der DLL:

Code: Alles auswählen

EnableExplicit

ProcedureDLL.i test()
  
  Protected.i a = 3
  Protected.i b = 5
  Protected.i c = #Null
  
  c = a+b
  
  ProcedureReturn c
  
EndProcedure


Ich habe oft gelesen, dass man irgendwie eine Header-Datei erstellen muss, da die DLL-Funktion bestimmten Konventionen genügen muss, nur ich habe nicht die leiseste Ahnung wie ich da vorgehen muss und passende Beispiele habe ich ebenfalls nicht gefunden.
Kann mir wer weiterhelfen?

Grüße
Toni
Nighthawk
Beiträge: 13
Registriert: 13.05.2006 14:51
Wohnort: Saarland

Re: PB-DLL-Funktion via JNI in Java aufrufen

Beitrag von Nighthawk »

Hallo #Ton,
schau dir mal JNA an.

https://github.com/twall/jna

Damit kannst du eine native Dll die, die stdcall-Aufrufkonvention unterstützt einfach in dein Projekt mit
einbinden.Man braucht sich nicht einmal Gedanken um das Marshalling zu machen, da dies von der Lib
selbst erledigt wird.

Gruß
Nighthawk
PB4.51 x86 / Win7 64bit
Aktuelle Projekte : Irrlichtwrapper für PB und .NET
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: PB-DLL-Funktion via JNI in Java aufrufen

Beitrag von juergenkulow »

Hallo #Ton,

Froggerprogger aus dem englischen Forum hat mir bei dem Problem geholfen:
problem calling a PB-DLL from Java

Gruß
Antworten