Kooperation Java <-> PureBasic

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Kooperation Java <-> PureBasic

Beitrag von Mok »

Servus!

Ist es möglich, Algorithmen (also Funktionen und Prozeduren), die ich in Java geschrieben habe, irgendwie in PB einzubinden (also eine kompilierte Datei, nicht den Javacode übersetzen)? Die Top-Frage ist natürlich WARUM? Und die Antwort drauf ist, dass es Sachen gibt, wo man (oder ich zumindest) in Java weniger Zeilen zum Proggen braucht und somit die Sache auch weniger umständlich ist. (Beispiel: Character-Array)
Mir ist klar, dass man 98 % der Sachen, die man in Java machen kann auch in PB realisieren kann (sogar die Klassen werden von Structure vertreten), nur hätte ich gerne einen Code den ich zu 100 % verstehe, anstatt, dass ich einen Teil meines PB-Codes überhaupt nicht verstehe.
Auch wenn das jetzt ein schlechtes Biespiel war... irgendwie müsste es doch gehen... oder? jedenfalls sehe ich nicht den großen Unterschied (und auch die Funktionsweise/das Anwendungsgebit) der beiden Sprachen als Problem, sondern eher das Format: Mit Javas CLASS kann man in PB reichlich wenig anfangen.

MfG, Mok

Edit: Damn, ich Idiot! Kann irgendein Mod das nach "Andere Sprachen" verschieben?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Kooperation Java <-> PureBasic

Beitrag von DarkDragon »

Andersrum kenn ich das .. das geht mittels Java Native Interface. Aber sorum hab ich es noch nie versucht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Kooperation Java <-> PureBasic

Beitrag von Mok »

Ich hab im Java-Forum (zumindest glaube ich, dass es dort war) mal gelesen, dass man Java-Klassen zu Executables und Dynamic Link Libraries ändern kann, aber dann wäre die Sache irgendwie nur unter Windows lauffähig... oder nicht?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Kooperation Java <-> PureBasic

Beitrag von DarkDragon »

Mmh... es gibt einen GCJ compiler, also einen GNU Java Compiler. Der macht native binaries. Nur darfst du dann nicht allzu viel davon erwarten, weil das Projekt hinterherhinkt seit 1999 oder so. Dann gibt es noch projekte die Kapseln das ganze irgendwie, aber das ist nur für Windows und für nichts sonst.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Re: Kooperation Java <-> PureBasic

Beitrag von Vermilion »

...Außerdem müsste man noch zusätzlich einen Wrapper erstellen, denn Java ist rein Klassenbasiert.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Re: Kooperation Java <-> PureBasic

Beitrag von Froggerprogger »

JNI (Java Native Interace) funktioniert in beide Richtungen.
Native DLL in ein Java-Programm einbinden
(Zu dieser Richtung habe ich hier schonmal ein Beispiel gebracht.)
1. Erstelle eine DLL in PureBasic, C, ... Die später von Java aus aufzurufenden Funktionsnamen müssen einer bestimmten Konvention genügen.
2. Erstelle eine neue Java-Klasse, die die DLL-Funktionen als Native-Methoden (mit dem native-Schlüsselwort) enthält, und die DLL selbst ihrem Namen nach lädt.
3. Starte das Java-Programm in der JVM. Das Programm ruft nun bei den Native-Methoden automatisch die DLL auf.

Zweite Richtung: Java-Programm von einem anderen Programm aus einbinden
(Selbst noch nichts mit gemacht, aber sollte etwa so funktionieren)
Das Aufrufen von (reinen) Java-Funktionen über JNI von einem Nicht-Java-Programm aus ist jederzeit möglich. Du kannst also per JNI alle Funktionen aller Java-Klassen aufrufen. Die Frage ist eher, wer startet die JVM. Der Anwender, und dein Programm wird dann wie oben beschrieben als DLL eingebunden? Oder soll nur Dein Programm gestartet werden und die Java-Funktionen aufrufen? Auch dann benötigst der Rechner eine JVM. Einige Funktionen im JNI-Interface dienen dazu, eine JVM auf dem System zu erkennen und zu starten. In diese kannst Du dann die entsprechenden (reinen) Java-Klassen reinladen, und ihre Methoden aufrufen.

Alles in allem waren meine Erfahrungen damit: Sobald es erstmal läuft, läuft es erstaunlich gut!
!UD2
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

InOutPut

Beitrag von kswb73 »

Könnte man nicht auch Java mit PureBasic kommunizieren lassen?
Ich kenn mich jetzt nicht wirklich mit Java aus, aber die meisten Beispiele für Anfänger kommunizieren über die Kommandozeile (CMD). Das müsste man doch mit PureBasic auslesen können.
Außerdem muss es ja irgendwie möglich sein, da auch OpenOffice Java verwendet.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Re: Kooperation Java <-> PureBasic

Beitrag von Karl »

Hallo,

ein Kommunikationskanal könnte ein Client/Server-Modell oder eine simple Dateiaustauschoperation sein. Bei Operationen auf verschiedenen Anwendungsprogrammen versuche ich über parametrisierte Konsolenbefehle, u. U. mit Dateiangabe, zu hantieren. Dabei erspare ich mir das Busy-Waiting-Problem. Java und PB beherrschen Konsolenanwendungen.

Gruß

Der Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Antworten