Seite 1 von 1

PB-DLL-Funktion via JNI in Java aufrufen

Verfasst: 07.07.2013 12:23
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

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

Verfasst: 07.07.2013 23:35
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

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

Verfasst: 07.10.2019 23:32
von juergenkulow
Hallo #Ton,

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

Gruß