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?
Kooperation Java <-> PureBasic
- 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
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
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Kooperation Java <-> PureBasic
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.
- 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
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
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Kooperation Java <-> PureBasic
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.
- Vermilion
- Beiträge: 1846
- Registriert: 08.04.2006 16:00
- Computerausstattung: Apple iMac (2010) & HP Notebook
- Wohnort: Heidekreis
Re: Kooperation Java <-> PureBasic
...Außerdem müsste man noch zusätzlich einen Wrapper erstellen, denn Java ist rein Klassenbasiert.
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Re: Kooperation Java <-> PureBasic
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!
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
InOutPut
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.
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
Open Suse 11.2: PB 4.4
Re: Kooperation Java <-> PureBasic
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
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
PB 5.X