Programm von C++ auf Java umschreiben

C2J

Mitglied
Hallo!

Ich beschäftige mich zur Zeit damit ein Programm von C++ auf Java umzuschreiben.

Es gibt an einigen Stellen Probleme... aber keine Sorge ich frag alles nach und nach;)

meine erste Frage ist:

in einem der Header wird
Code:
 typedef unsigned long Half;
definiert.
und später in einer Struktur
Code:
Half e_type;
                                               Half e_machine;

bei einer anderen Funktion
Code:
virtual Half  GetType()  const =0 
                                              virtual Halft GetMachine() const = 0

In Java hab ich das so geschrieben:
Java:
  public short e_type;
	                                        public short e_machine;

und bei der Funktion :
Java:
short getClass();
                                            short GetMachine();


bei GetMachine() is alles ok aber bei getClass() schmeißt der mir nen Fehler raus? "The return type is incompatible with Object.getClass()"


Ich hoffe ich konnte das halbwegs klar machen! es sind verschiedenen Dateien und ich hab erst Code-Fetzen deshalb kann musste ich das so komisch zusammensetzen.

Vielen Dank schonmal!

Gruß
 

Marco13

Top Contributor
Die Methode "getClass" gibt es schon in der Klasse "Object" (von der alle Klassen erben). D.h. dort versuchst du, eine Methode zu überschreiben - aber mit einem anderen Rückgabetyp (aber auch sonst sollte man die nicht überschreiben - ich denke, die ist auch final).

Nenn' die Methode nicht getClass sondern ... getMachineClass oder wie auch immer....
 

musiKk

Top Contributor
(aber auch sonst sollte man die nicht überschreiben - ich denke, die ist auch final).

Ist sie. Vor dem Hintergrund wäre eine Fehlermeldung à la "cannot override final method" wahrscheinlich hilfreicher gewesen. Tatsächlich kommt dieser Fehler bei Eclipse erst zuletzt. Versucht man z. B. eine [c]Class<?> getClass()[/c] zu implementieren, lautet der Fehler "cannot reduce visibility..."
 

Tobse

Top Contributor
Darf ich fragen, warum du einen [c]unsigned long[/c] in einen
Code:
short
übersetzt? Java ist ja (leider) nicht in der Lage, unsigned-typen zu erstellen.
 

piu58

Mitglied
> (leider) nicht in der Lage, unsigned-typen zu erstellen

Ich emfinde das nicht als "leider". DIeser ganze Typenwahnsinn unter C/C++ kostet doch Nerven. Und int unter java bietet doch für fast alle Fälle einen genügend großen Zahlenraum. Unsigned ist ein Krücke, um mit 8- oder 16-bit-Zahlen halbwegs hinzukommen.
 
G

Gast2

Gast
DIeser ganze Typenwahnsinn unter C/C++ kostet doch Nerven.

ja - aber C/C++ Compiler sind für alle möglichen Typen von Prozessoren, von 8 bis 64 Bit. Das spiegelt auch irgendwie der Standard wieder.

[DUKE]short(2 Bytes) <= int (2 oder 4 Bytes) <= long (4 oder 8 Bytes)[/DUKE]
auf Grund der Standart Datentypen kannst Du gar nicht wissen (durch reines betrachten des Quelltextes) wieviel Bytes Dein int gerade verbraucht bzw. kann. Lustig wird es wenn ein Sytemadmin im Hintergrund den Compiler aktualisert, der Hersteler für int statt der 2 Byte plötzlich 4 Bytes wählt und Dein Programm nicht mehr in der Prozessor passt.

Bei uint8, uint16 bzw. uint32 weist Du zumindest im Quelltext das es immer 8, 16 oder 32 Bit sind.
 

Tobse

Top Contributor
für fast alle Fälle
Ja eben genau das. Wenn ich einen Zahlenraum von 0-50.000 abdecken will in einer Klasse die möglicherweise 5.000-10.000 mal gleichzeitig instantiiert ist, dafür aber ein int nehmen muss, weil es kein
Code:
ushort
gibt macht das am Ende ganz schön was her. Kleinvieh macht auch mist.
Ausserdem ist das fehlen von unsigned-Typen daran Schuld, dass Java nur Dateien bis 2GB bearbeiten kann...
 
G

Gast2

Gast
Wenn ich einen Zahlenraum von 0-50.000 abdecken will in einer Klasse die möglicherweise 5.000-10.000 mal gleichzeitig instantiiert ist, dafür aber ein int nehmen muss, weil es kein
Code:
ushort
gibt macht das am Ende ganz schön was her.
wow - 20kB bei (min.) 2GB gesamt Speicher.

Kleinvieh macht auch mist.
sicher

Ausserdem ist das fehlen von unsigned-Typen daran Schuld, dass Java nur Dateien bis 2GB bearbeiten kann...
sorry - aber das ist eindeutig eine Designfehler von ${WerAuchImmerAufDieIdeeKam}. C# nimmt dort long, genau so wie die POSIX-Implementierung.
 

Tobse

Top Contributor
wow - 20kB bei (min.) 2GB gesamt Speicher.
Ja stimmt schon, ist nicht viel aber etwas :D
sorry - aber das ist eindeutig eine Designfehler von ${WerAuchImmerAufDieIdeeKam}. C# nimmt dort long, genau so wie die POSIX-Implementierung.
Ja. Hätte man bei Java wenigstens ein uint genommen wärens schon 4GB.

Ist ja auch egal, ich vermisse die unsigned-datentypen manchmal einfach.

@Topic:
Faktisch kann aber ein
Code:
short
nicht das speichern, was ein
Code:
ulong
kann. Nur als Tipp ;)
 

KuhTee

Aktives Mitglied
wow - 20kB bei (min.) 2GB gesamt Speicher.
Vor 7 Jahren hatte ich bei der Entwicklung mit Java (J2ME) noch um ein Bruchteil dieses Wertes gekämpft, und zwar mehrere Tage. Und auch heute noch gibt es Geräte mit Java, wo der Speicherverbrauch nicht unerheblich sein kann.

@Topic:
Faktisch kann aber ein
Code:
short
nicht das speichern, was ein
Code:
ulong
kann. Nur als Tipp ;)
Ja, selbst wenn man den Unterschied zwischen signed und unsigned nicht kennt, ist es schon merkwürdig, für etwas was "long" heisst einen "short" zu nehmen, wo doch Java selbst auch einen Datentyp kennt, der "long" heisst :D
 

Marco13

Top Contributor
Das spiegelt auch irgendwie der Standard wieder.

[DUKE]short(2 Bytes) <= int (2 oder 4 Bytes) <= long (4 oder 8 Bytes)[/DUKE]

<halbwissen>
Soweit ich weiß (!) ist im echten C-Standard praktisch GAR nichts in bezug auf "echte Größen" festgelegt ... ich hatte da mal gesucht, und meine (!) da stünde am Ende nur (sehr verklausuliert) : Ein char hat die Größe einer Adressierungseinheit, und alle anderen (short, int, long...) sind mindestens so groß wie char. Wenn nun jemand einen Prozessor baut, der Nibbles für die Addressierung verwentet, kann es - falls ich das richtig verstanden und in Erinnerung habe - sein, dass der C-Compiler dafür einfach char=short=int=long=4bit festlegt, und nichts aus dem C-Standard würde ihn daran hindern.
</halbwissen>
 

piu58

Mitglied
Im C-Standard ist festgelegt, das short<=int<=long und das int die prozessortypische Größe ist, womit also die Recheneinheit am besten klar kommt.

C ist so ne Art maschinenunabhängiger Assembler.
 

C2J

Mitglied
Danke euch für die Hilfe! (sry für meine später antwort!)

@Marco13: Werde ich mal so machen! Danke dir!

Darf ich fragen, warum du einen unsigned long in einen short übersetzt? Java ist ja (leider) nicht in der Lage, unsigned-typen zu erstellen.

Ich hab mir darüber keinen Kopf gemacht! Sehr cool wie das hier eine Grundsatzdiskussion losgetreten hat :)
dann nehm ich einfach .long ... der Speicherplatz ist mir jetz erstmal egal
 

C2J

Mitglied
Ich habe noch eine weitere Frage:

In einer Header Datei werden mehrere Klassen deklariert. Also mache ich in Java eine Klasse, von der alle diese Unterklassen erben!

In denen Unterklassen stehen so lustige Sachen wie:
Code:
virtual Unterklasse1_Err Load( const std::string& sFileName )        = 0;
    virtual Unterklasse1_Err Load( std::istream* pStream, int startPos ) = 0;

virtual gibt es nicht.ich habs übersetzt mit:
Java:
Unterklasse1_Err Load(String sFileName);

Bei der zweiten Zeile habe ich jetz das problem das ich die Variable istream* noch nich verstehe.

Ich weiß das es ein Input ist. Soll ich dann einfach einen in der Oberklasse schreiben den die Unterklassen erben?
Java:
BufferedReader istream = new BufferedReader(new InputStreamReader(System.in));

oder n neues package aufmachen und darauf zugreifen mit
Java:
neuespackage.istream

Ich hab immer Sorge das ich dadurch den Sinn verändere.
Heißt istream das das ne Nutzereingabe ist oder is das irgend ein anderer Input?

Danke euch!
Gruß
 

Marco13

Top Contributor
Heißt istream das das ne Nutzereingabe ist oder is das irgend ein anderer Input?

Ja :) Genau das :D : Nutzereingabe - ODER irgendein (!) anderer Input. Am ehesten würde man das direkt mit einem InputStream übersetzen. Das 'startpos' ist da schon schwieriger, da müßte man ggf. genauer wissen, was das ist und wie das verwendet werden soll.
 

C2J

Mitglied
Ahh das ist wunderbar:) dann brauch ich mich nicht entscheiden..sonst würde ich womöglich hinterher eine Nutzereingabe vorgeben und es ist keine ;)

Ich merke mir ist mehr geholfen mich ersteinmal daran zu begeben GENAU zu verstehen was das Programm wann wo tut...
Sonst enstehen immer mehr so Fragen.
Und dann schreib ich es ganz neu. Weil wenn ichs nur übersetzte muss ich die Struktur von dem *Herrn* übernehmen der das in C++ geschrieben hat :D

Hoffe ich kann euch weiter mit Fragen bombadieren. Mein bester Freund bleibt zwar Google aber spezifische Fragen habt ihr mir super schnell beantwortet für die ich sonst 10 tutorials auswendig gelernt haben müsste von denen 3 nichtmal passend sind.

In diesem Sinne
 
S

Spacerat

Gast
Ich merke mir ist mehr geholfen mich ersteinmal daran zu begeben GENAU zu verstehen was das Programm wann wo tut...
Das ist ein guter Vorsatz... Leider müsste man dazu zumindest die Sprache kennen, von welcher man konvertieren oder ganz pragmatisch Funktionalitäten stibitzen will.
Aber es gibt Leute (wie mich z.B.) die machen das ganz anders, die lernen genau jene Sprache, die dem Maschinencode am nächsten kommt, nämlich Assembler. Dann nehmen sie sich einen Recompiler wie IDAPro und versuchen damit ihr Glück. Das hat dann zwar so gesehen nichts mehr mit der Sprache zu tun, in welcher das Programm einst entwickelt wurde, aber das wird zunehmend egal.
BTW.: "USEFORM()" könnte bereits was API spezifisches sein, evtl. ein Verweis auf die Form einer zuvor erstellten GUI (VisualC++; "USERFORM()") die man verwenden möchte.
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Man sollte es grundsätzlich hinterfragen, wenn APIs 1:1 in andere Sprachen übersetzt werden (jaja, ich weiß, das sagt der richtige :oops: ). Spätestens, wenn in dem C-Teil irgendwas mit Pointern oder Referenzen oder Structs vorkommt, wird die direkte Übersetzung nach Java ggf. schwierig.
 
S

Spacerat

Gast
Man sollte es grundsätzlich hinterfragen, wenn APIs 1:1 in andere Sprachen übersetzt werden...
1:1 fällt bei Assembler z.B. komplett aus (Emulatoren mal aussen vor). Wichtig ist nur, dass man herausfindet, wie das ein oder andere funktioniert. Wenn man da dann hinter gekommen ist, ist's gar nicht mehr nötig alles 1:1 übernehmen zu müssen, weil in der Zielsprache gibt's definitiv andere, evtl. sogar bessere Wege, das herausgefundene zu realisieren. Genau darin liegt die Kunst der Konvertierung (Ich denke mal nicht, dass z.B. in Quaxlis Tutorial noch eine einzige Zeile Original "Falcon Patrol II"-Code enthalten ist).
Lustigerweise, lernt man durch IDAPro einige Sprachen (z.B. C/C++) von einer ganz anderen Seite kennen und freut sich urplötzlich, dass sein eigenes Programm nicht so "starr dämlich" (sondern evtl. nur "dämlich") von einem Kompiler übersetzt wurde, weil ja noch ein dazwischen hängender JIT ständig optimiert und ein eben solcher GC hin und wieder aufräumt, wenn er mag.
 

C2J

Mitglied
Verstehe ich das richtig der folgende Befehl einfach nur die Länge eines long ausliest und zurückgibt??

Code:
AnsiString aLongToStr(long value) {
  return AnsiString(value);
}
 
G

Gast2

Gast
In einer Header Datei werden mehrere Klassen deklariert.
*pfui* - dafür gibt es Verzeichnisse und auf Wunsch sogar noch Namespace

Also mache ich in Java eine Klasse, von der alle diese Unterklassen erben!
nur wenn in der Header das auch so ist

In denen Unterklassen stehen so lustige Sachen wie:
Code:
virtual Unterklasse1_Err Load( const std::string& sFileName )        = 0;
    virtual Unterklasse1_Err Load( std::istream* pStream, int startPos ) = 0;

Java:
public interface Variante1 {
    public Unterklasse1_Err Load(String sFileName );
    public Unterklasse1_Err Load(Stream pStream, int startPos );
}

oder

Java:
public abstract class Variante2 {
    ...
    public abstract Unterklasse1_Err Load(String sFileName );
    public abstract Unterklasse1_Err Load(Stream pStream, int startPos );
    ...
}

hand, mogel
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F Java-Programm lizensieren Allgemeine Java-Themen 21
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
itwestnet Mein Java-Programm läuft nicht in China Allgemeine Java-Themen 4
B SMS von Vodafone Mobile Connest mit JAVA-Programm lesen Allgemeine Java-Themen 0
J Java Auf anderes Programm warten Allgemeine Java-Themen 9
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
Developer_X OpenStreetMap in Java Programm einbinden Allgemeine Java-Themen 10
Developer_X Java Programm Beenden Allgemeine Java-Themen 3
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
S Java-Programm verbraucht zu viel RAM Allgemeine Java-Themen 8
S Java-Programm für "Börsenanalyse" schreiben Allgemeine Java-Themen 4
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
M Problem mit (etwas komplizierterem) Java Programm Allgemeine Java-Themen 14
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
J Java Programm - ausführbare Jar Datei erstellen Allgemeine Java-Themen 2
J Java-Programm Allgemeine Java-Themen 13
I Java-Programm: Zahlen in Worte Allgemeine Java-Themen 22
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
Java-Insel Wie kann ich ein Java-Programm zum "automatischen Öffner" einer Dateisorte machen? Allgemeine Java-Themen 13
O Java-Programm lastet CPU aus Allgemeine Java-Themen 8
C Registration im Web mit Java-Programm durchführen Allgemeine Java-Themen 6
R Java Programm beenden mit SIGTERM Allgemeine Java-Themen 9
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
H Java-Programm nur mit SDK ausführbar? Allgemeine Java-Themen 5
C Java Programm über SSH starten Allgemeine Java-Themen 16
S jar Datei mit Java Programm öffnen Allgemeine Java-Themen 3
J Java-Programm im Hintergrund Allgemeine Java-Themen 3
Jackii Java Programm aus anderen Java Programm starten Allgemeine Java-Themen 20
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
G Java Programm aus Java Programm starten Allgemeine Java-Themen 6
M Wie Java Programm mit grafischen Oberfläche versehen Allgemeine Java-Themen 2
JAVATUX Java Programm mit ATI Stream Unterstützung Allgemeine Java-Themen 3
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
C Mit Java in einem anderes Programm eingreifen Allgemeine Java-Themen 21
S C++/C KeyListener zusammen mit Java Programm Allgemeine Java-Themen 4
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
S Brauche Hilfe bei Planung für JAVA-Programm Allgemeine Java-Themen 3
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
F Anderes Java-Programm aufrufen Allgemeine Java-Themen 2
B Excel Datei in einem Java Programm mit GUI darstellen Allgemeine Java-Themen 9
M Java Programm als Dienst starten... Allgemeine Java-Themen 4
A Installation von Java ME Programm auf Sony Ericsson Handy Allgemeine Java-Themen 3
M Rein informativ - Daten aus Excel-Tabelle in Java-Programm importieren Allgemeine Java-Themen 3
J Installer für Java-Programm Allgemeine Java-Themen 5
N Programm starter in Java? Allgemeine Java-Themen 12
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
T Mit JNI von C++ auf ein laufendes Java-Programm zugreifen Allgemeine Java-Themen 10
H aus Java-Programm Dateien öffnen Allgemeine Java-Themen 5
Z Java Programm - xxxxx auf der Konsole ausgeben Allgemeine Java-Themen 4
T cpp Programm via jna in java nutzen Allgemeine Java-Themen 3
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
G Java Programm mit Freischalt code entwickeln Allgemeine Java-Themen 30
clupus Meldung an laufendes Java-Programm schicken - Wie? Allgemeine Java-Themen 6
E Zweites Java Programm sichtbar starten Allgemeine Java-Themen 4
T Mit Java Programm auf Firefox zugreifen Allgemeine Java-Themen 2
Airwolf89 *.exe mit java programm ausführen Allgemeine Java-Themen 1
V Java-Programm automatisch starten Allgemeine Java-Themen 2
MQue aktuelle Wetterdaten für Java- Programm Allgemeine Java-Themen 9
O Programm mittels Java installieren Allgemeine Java-Themen 15
K Java Chat Programm Allgemeine Java-Themen 2
M Java programm über cmd öffnen Allgemeine Java-Themen 2
Schandro Datei öffnen mit... Bestimmten Dateityp mit einen Java-Programm öffnen lassen Allgemeine Java-Themen 5
N Per Java-Programm onClick ausführen Allgemeine Java-Themen 5
D mit Java das Programm "Editor" öffnen Allgemeine Java-Themen 7
M Wie Java-Programm über Batch-file starten? Allgemeine Java-Themen 8
G Logikhindernisse im Java- Programm Allgemeine Java-Themen 6
V Java-Programm nur "mit halber Kraft" arbeiten lass Allgemeine Java-Themen 11
_SeiA_ Hilfe Kleines Java Programm schreiben. Summen. Allgemeine Java-Themen 3
G Java- Programm mit bat- Datei starten Allgemeine Java-Themen 16
V Java-Programm richtig neustarten? Allgemeine Java-Themen 9
G JDBC Programm und niedrige Java-Versionen Allgemeine Java-Themen 14
oltoko PID für das laufende Java Programm herausfinden Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben