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/)
-   -   C nach Pascal (https://www.delphipraxis.net/126476-c-nach-pascal.html)

totti14 25. Dez 2008 23:55


C nach Pascal
 
Hallo,
ich versuche gerade ein kleine C Beispiel nach Pascal zu übersetzten hänge aber leider an folgenden Konstrukt:


Stack.h

Code:
#define MAX_APP_ENTRY 5

typedef struct
{
 unsigned int port;               // Port
 void(*fp)(unsigned char);  // Zeiger auf auszuführende Funktion
} TCP_PORT_ITEM;


TCP_PORT_ITEM TCP_PORT_TABLE[MAX_APP_ENTRY];
Stack.c

Code:
TCP_PORT_ITEM TCP_PORT_TABLE[MAX_APP_ENTRY] = // Port-Tabelle
{
 {0,0},
 {0,0},
 {0,0} 
};
Hätte da jemand einen Tip.

Danke
Thorsten

[edit=Matze][c]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG, Matze[/edit]

Cyf 26. Dez 2008 04:48

Re: C nach Pascal
 
Zitat:

Zitat von totti14
#define MAX_APP_ENTRY 5

Kannst du als Konstante ansehen.


Zitat:

typedef struct
{
unsigned int port; // Port
void(*fp)(unsigned char); // Zeiger auf auszuführende Funktion
} TCP_PORT_ITEM;
Ein record.


Zitat:

TCP_PORT_ITEM TCP_PORT_TABLE[MAX_APP_ENTRY];
Ein Array dieses records, von 0 bis MAX_APP_ENTRY.



Zitat:

TCP_PORT_ITEM TCP_PORT_TABLE[MAX_APP_ENTRY] = // Port-Tabelle
{
{0,0},
{0,0},
{0,0}
};
Die ersten 3 Indexe auf 0 initialisieren.

totti14 26. Dez 2008 12:00

Re: C nach Pascal
 
Hallo Cyf,
dann sollte es doch so aussehen:

Delphi-Quellcode:

Type
  TCP_PORT_ITEM = Record
                     port          : Word; // Port
                     fp            : Pointer;  // Zeiger auf auszuführende Funktion
                   end;
var
  TCP_PORT_TABLE : array[0..MAX_APP_ENTRY-1] of TCP_PORT_ITEM;


initialization
  for i:=0 to 2 do
   TCP_PORT_TABLE[i]:=(0,0);
Aber wo bleibt das Byte(Char) aus void(*fp)(unsigned char); // Zeiger auf auszuführende Funktion

Gruß
Thorsten

DeddyH 26. Dez 2008 12:19

Re: C nach Pascal
 
Nicht, dass ich da Ahnung davon hätte, aber kann es sein, dass die auszuführende Funktion über ihren Namen angesprochen werden soll?

SirTwist 26. Dez 2008 12:20

Re: C nach Pascal
 
Zitat:

Zitat von totti14
Aber wo bleibt das Byte(Char) aus void(*fp)(unsigned char); // Zeiger auf auszuführende Funktion

Du musst Dir zuerst einen Typ definieren:
Delphi-Quellcode:
type
  TCallProc = procedure(c: Char);
Und dann ist 'fp' im Record 'TCP_PORT_ITEM' kein Pointer, sondern ein TCallProc.

Wobei ich grad nicht auswendig weiß, was der richtige Delphi-Datentyp für 'unsigned char' ist.

Gruß,
SirTwist

totti14 26. Dez 2008 13:47

Re: C nach Pascal
 
Danke funzt

Delphi-Quellcode:
type
  TCallProc = procedure(c: Char);

  TCP_PORT_ITEM = Record
                     port          : Word; // Port
                     fp            : TCallProc;  // Zeiger auf auszuführende Funktion
                   end;

initialization

for i:=0 to MAX_APP_ENTRY-1 do
    TCP_PORT_TABLE[i].Port:=0;
    TCP_PORT_TABLE[i].fp:=nil;
   endfor;
dann sollte das doch eine Variable sein
struct arp_table arp_entry[MAX_ARP_ENTRY];

Delphi-Quellcode:
Var
  arp_entry : Array[0-MAX_ARP_ENTRY-1] of arp_table;
Nur wofür steht das struct davor ? Ist ja kein Record.
Sieht alles anders aus als in den Tutorials

Thorsten

Cyf 26. Dez 2008 14:09

Re: C nach Pascal
 
Zitat:

Zitat von SirTwist
Wobei ich grad nicht auswendig weiß, was der richtige Delphi-Datentyp für 'unsigned char' ist.


Byte
:!: Ansonsten stimmts bei Unicode-Chars nicht mehr. In C ist ein Char immer genau 1 Byte groß.

Zitat:

Nur wofür steht das struct davor ? Ist ja kein Record.
Ist in C so üblich, wenn die struct nicht nochmal durch ein typedef benannt ist.
Wenn arp_table bei dir der Typ der struct ist, stimmt das schon.
Nur hast du wahrscheinlich eher
Delphi-Quellcode:
array[0 .. MAX_ARP_ENTRY-1]
gemeint.

totti14 26. Dez 2008 14:20

Re: C nach Pascal
 
Zitat:

Nur hast du wahrscheinlich eher
Delphi-Quellcode: markieren
array[0 .. MAX_ARP_ENTRY-1]
gemeint.
Ups Tippfehler.

Mal schauen wie weit ich jetzt komme.

Danke alle

Thorsten

Christian Seehase 26. Dez 2008 14:32

Re: C nach Pascal
 
Moin Thorsten,

den Record würde ich allerdings so beginnen:

Delphi-Quellcode:
Type
  TCP_PORT_ITEM = packed record
                     port          : cardinal; // Port
unsigned int entspricht in Delphi dem cardinal, da es er 4 Byte gross ist, und nicht 2.

totti14 26. Dez 2008 16:34

Re: C nach Pascal
 
Zitat:

unsigned int entspricht in Delphi dem cardinal, da es er 4 Byte gross ist, und nicht 2.
Jups, habe ich übersehen. Ist jetzt ein Longword, da für einen 8 Bit Controller und AVRco Pascal.
Word sind ja hier 16 Bit und das würde für den Portrange nicht reichen.

Danke
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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