Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi nach C übersetzen [ gelöst ] (https://www.delphipraxis.net/149822-delphi-nach-c-uebersetzen-%5B-geloest-%5D.html)

Corpsman 31. Mär 2010 09:27


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..

SirThornberry 31. Mär 2010 09:35

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.

Corpsman 31. Mär 2010 09:44

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 ?

Neutral General 31. Mär 2010 09:46

Re: Delphi nach C übersetzen
 
Zitat:

Extended hatte ich als double übersetzt, das stimmt doch, oder ?
Leider nein.

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!)

SirThornberry 31. Mär 2010 09:50

Re: Delphi nach C übersetzen
 
Zitat:

Zitat von Corpsman
Warum mus ich die Typedefs in der *.c und in der *.h Datei rein schreiben ?

Wer behauptet so etwas? :shock: Typdefs und externe Declarationen gehören nur in die H-Datei und diese wird dann in die C-Datei includiert.

Schau mal hier: http://www.grin.com/e-book/96293/c-programmierung
Da sind einige Typen aufgeführt mit Größenangabe.

Corpsman 31. Mär 2010 09:50

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*

SirThornberry 31. Mär 2010 09:56

Re: Delphi nach C übersetzen
 
Hier noch eine Seite zur Typenübersicht:
http://archiv.raid-rush.ws/t-15989.html

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.

Corpsman 31. Mär 2010 10:01

Re: Delphi nach C übersetzen
 
Ich habe folgende Typen übersetzt :
Delphi-Quellcode:
Paskal        -> C
 
Single        -> float
Int64          -> Long Long
Cardinal      -> unsigned long int
double        -> double
var x: integer -> int *x
var n: TVector2-> Tvector2 *n
und natürlich die beiden Type defs
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;

Miolin 31. Mär 2010 10:30

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...

Corpsman 31. Mär 2010 10:41

Re: Delphi nach C übersetzen
 
Zitat:

von http://archiv.raid-rush.ws/t-15989.html

float 4 Byte 1.2e-38 bis 3.4e38
double 8 Byte 2.2e-308 bis 1.8e308
Bist du dir da sicher ?

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 18:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz