![]() |
Delphi nach C übersetzen [ gelöst ]
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen,
Von C nach Delphi übersetzen ist ja irgendwie einfach, man sieht die Deklarationen und "Rät" dann mehr oder weniger das Richtige Äquivalent in Delphi / FPC oder googelt den unbekannten Ausdruck. Nun hatte ich das Glück meine Diplomarbeit in FPC schreiben zu dürfen. Leider jedoch will das Institut für das ich schreibe, dass eine C Library eingebunden werden kann. Also habe ich mich hingesetzt und eine FPC Library erzeugt, welche wunderbar in meinem Programm Funktioniert. Von dieser Grundlage aus habe ich nun versucht eine *.h Datei zu erzeugen. Mein Problem ist nun, das ich keine Ahnung habe, ob meine zusammen gegoogelte Header File auch wirklich stimmt. Wenn sich hier irgend jemand der C kann erbarmen würde sich mein "Werk" mal an zu sehen. Und evtl. den ein oder anderen Fehler auf zu decken wäre das echt super. Mein gcc kompiliert es ohne eine Ausgabe, kann aber auch gut sein, dass ich nicht weis wie man den gcc dazu bringt eine Ausgabe zu erzeugen.. |
Re: Delphi nach C übersetzen
Du hast einen generellen Fehler drin.
In Delphi ist Pointer und utypisierter Pointer. Bei deiner Übersetzung hast du jedoch "int *Address" draus gemacht was ein typisiert wäre (nämlich ein Pointer auf einen Integer). Richtig wäre hier aber "void *Address" wenn es 1 zu 1 übersetzt werden soll und es sich nicht um einen Pointer auf einen Integer handelt. Und dann übersetzt du Single einmal als Single und später übersetzt du Extended (den Delphityp) auch als Single. Ein Extended hat doch eine andere Größe als ein Single. Und noch später übersetzt du Single plötzlich als float. Also bei den Fließkommatypen bringst du ein richtiges Durcheinander in die Sache. |
Re: Delphi nach C übersetzen
aha,
ich hatte Pointer c gegoogelt und nur int *blub gefunden ;) Das mit Single float war noch ein Copy Paste Fehler Extended hatte ich als double übersetzt, das stimmt doch, oder ? Wo habe ich denn Extended als Single übersetzt ? Hab im 1. Post die bis jetzt Korrigierte Version Aktuallisiert. Und noch was: Warum mus ich die Typedefs in der *.c und in der *.h Datei rein schreiben ? |
Re: Delphi nach C übersetzen
Zitat:
Soweit ich weiß ist SizeOf(Double) = 8 und SizeOf(Extended) = 10. Ich glaube in C gibt es kein Gegenstück zu Extended. (Bin mir da aber nicht sicher!) |
Re: Delphi nach C übersetzen
Zitat:
Schau mal hier: ![]() Da sind einige Typen aufgeführt mit Größenangabe. |
Re: Delphi nach C übersetzen
ARG,
ok, dann nehm ich in der Delphi / FPC Variante Extended raus und schreibe stattdessen auch Double, zumindest unter FPC gibts das ja. @SirThornberry wusste nicht das man das extra angeben muss, nu ist's drin *g* |
Re: Delphi nach C übersetzen
Hier noch eine Seite zur Typenübersicht:
![]() Wenn ich mich richtig entsinne hast du einen Delphi-Single auch als Single in C-Definiert. Das ist falsch. Ein Single ist in C soweit ich weiß kein Fließkommatyp sondern ein Ganzzahlentyp. Am besten listest du einmal auf was für Grundtypen du hast und wie du diese übersetzen würdest. Ich glaube da bekommst du eher Hilfe als wenn jeder erst deine C, und H Dateien runterladen muss und sich diese Stück für Stück ansehen muss. |
Re: Delphi nach C übersetzen
Ich habe folgende Typen übersetzt :
Delphi-Quellcode:
und natürlich die beiden Type defs
Paskal -> C
Single -> float Int64 -> Long Long Cardinal -> unsigned long int double -> double var x: integer -> int *x var n: TVector2-> Tvector2 *n
Delphi-Quellcode:
// Paskal
// Type // TKillCallback = Procedure(Address: Pointer); cdecl; // C typedef void TKillCallback(void *Address); // Paskal // Tvector2 = Record // x: Single; // y: Single; // End; // C typedef struct{ float x; float y; }Tvector2; |
Re: Delphi nach C übersetzen
Der Datentyp Single ist in C auch eine Fließkommazahl, aber mit einfacher Genauigkeit, und der Double/Float mit doppelter Genauigkeit...
|
Re: Delphi nach C übersetzen
Zitat:
Wenn ich die Deklaration Single im C, Code angebe, sagt gcc dass er weitere angaben zur Deklaration von single haben will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz