DLL für 64-bit

Sie sind sich nicht sicher, in welches Forum Ihre Frage oder Ihr Anliegen passt?
Möchten Sie ein neues Forum vorschlagen? Möchten Sie Kritik am Forum selbst üben?

Dann posten Sie bitte hier.
Post Reply
lightning
Posts: 5
Joined: Sat 18. Aug 2012, 00:24

DLL für 64-bit

Post by lightning »

Hallo,
ich bin neu hier im Forum, aber bereits seit einiger Zeit beschäftige ich mich mit neuronalen Netzen und bin natürlich auch über MemBrain "gestolpert" ;-)
Ich finde die Software wirklich klasse! Da ich ganz gerne ein Netz in ein Java-Programm einbinden wollte, habe ich die JNI Wrapper dll verwendet. Soweit hat das auch alles funktioniert nur bekomme ich beim kompilieren die Fehlermeldung: "Can't load IA 32-bit .dll on a AMD 64-bit platform"
Bedeutet das, dass ich die dll unter einem 64-bit System nicht verwenden kann? Gibt es trotzdem eine Möglichkeit, wie ich ich ein Netz in eine Java-Anwendung einbinden kann?
Vielen Dank schon mal.

PS: Hier zur Sicherheit die ganze Fehlermeldung aus Eclipse.
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Windows\System32\MBDllWrapper.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at de.membrainminusnn.MBDllWrapper.<clinit>(MBDllWrapper.java:118)
at trade.main(trade.java:8)
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: DLL für 64-bit

Post by Admin »

Hallo und herzlich Willkommen im Forum!

<Begin Edit:>
Die dll gibt es mittlerweile offiziell auch als 64 Bit Version. Dieser Beitrag wurde vor dem Release der 64 Bit Version verfasst, wurde aber der Vollständigkeit halber im Forum belassen.
< End Edit>

Die dll gibt es im Moment nur als 32 Bit-Version, eine 64 Bit Version ist allerdings gerade fertig gestellt und soll zusammen mit einer neuen MemBrain Version in naher Zukunft in die Freiheit entlassen werden.
Bisher habe ich die dll nur in Verbindung mit einer 64 Bit nativen Windows-Anwendung testen können. Ich würde ich mich aber tatsächlich sogar freuen, wenn jemand unter 64 bit Java einen kurzen Test veranstalten könnte. Die JNI Wrapper-dll und die MemBrain dll habe ich als Test Releases einmal hier angehängt, für Feedback bin ich natürlich sehr dankbar!

In der Datei 'MBDllWrapper.java' muss in der Zeile

Code: Select all

static
	{
	    System.loadLibrary("MBDllWrapper");
	}
Die neue dll eingetragen werden ('MemBrainDll64').

Alternativ kann man eine 32 Bit Java Engine benutzen und unter dieser die eigene Java Anwendung starten. Die 32 Bit Java Engine kann auch auf einem 64 Bit Betriebssystem eine 32 Bit native dll laden, da sie dann unter WOW64 läuft.

Ansonsten gäbe es noch den 'Workaround' MemBrain selbst von Java aus über Dateischnittstelle und MemBrain-Skripte fernzusteuern und auch die Daten wieder über Dateien zurückzulesen. Das ist aber natürlich weder performant noch schön in der Programmierung und der Handhabe...

Viele Grüße und viel Erfolg!
Attachments
MemBrainDll64_TestRelease_04_00_00_01.zip
Test Release 04.00.00.01 der MemBrain dll und der JNI Wrappe dll (64 Bit Versionen)
(387.9 KiB) Downloaded 959 times
Thomas Jetter
lightning
Posts: 5
Joined: Sat 18. Aug 2012, 00:24

Re: DLL für 64-bit

Post by lightning »

Danke für die schnelle Antwort! Bei mir funktioniert das Ganze. Ich habe die DLLs im System 32 Pfad ersetzt und dann die Wrapper-Klasse von "MBDllWrapper" nach "MBDllWrapper64" abgeändert.
Mein Programm verwendet erst einmal nur
  • MBLoadNet()
  • MBGetInputCount()
  • GetLastError()
  • MBGetSelectedNet()
zum überprüfen ob die Basis funktioniert. Bisher klappt alles einwandfrei und das erste kleine Projekt läuft. Vielen Dank für die Mühen!
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: DLL für 64-bit

Post by Admin »

Ich habe zu danken, für den Test!

Schön, dass es auf Anhieb geklappt hat. Zusammen mit dem neuen MemBrain Release wird es auch eine offizielle Relase der 64 Bit dll geben (nämlich die Version 04.00.01.00).
Wenn keine unerwarteten Probleme mehr auftreten, wird es sich aber um eine schlichte Neuübersetzung nach der Versionsanpassung handeln, darüberhinaus sind an der dll bis zu dem Release keine Änderungen mehr geplant.
Ein schöner Test wäre auch noch, die Funktion MBSaveNet() aufzurufen und danach das Netz in MemBrain (händsich) zu öffnen. Nur um sicherzustellen, dass beim Abspeichern unter 64 Bit die entstehende mbn-Datei kompatibel mit (32 Bit) MemBRain selbst bleibt. Da ich das mit einer nativen Anwendung schon getestet habe, gehe ich allerdings davon aus, dass es auch unter Java keine Probleme geben dürfte.

Die wesentliche Neuerung an MemBrain selbst wird übrigens ein komfortabler, externer Skript-Debugger mit Syntaxhighlighting, Breakpoints, Variablenüberwachung etc. sein. Ich hoffe, das Release in einigen Wochen veröffentlichen zu können.

Viele Grüße
Thomas Jetter
lightning
Posts: 5
Joined: Sat 18. Aug 2012, 00:24

Re: DLL für 64-bit

Post by lightning »

Auch die MBSaveNetAs() bzw. MBSaveNet() funktionieren. Es werden alle im Javaprogramm vorgenommenen Modifikationen der Gewichte und Activations korrekt übernommen. Das neue Netz lässt sich ganz normal öffnen und in MemBrain betrachten.
Dann freue ich mich schon auf das Release. ;-)
Post Reply