AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C nach Pascal

Ein Thema von totti14 · begonnen am 26. Dez 2008 · letzter Beitrag vom 26. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#1

C nach Pascal

  Alt 26. Dez 2008, 00:55
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]
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#2

Re: C nach Pascal

  Alt 26. Dez 2008, 05:48
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.
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: C nach Pascal

  Alt 26. Dez 2008, 13:00
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: C nach Pascal

  Alt 26. Dez 2008, 13:19
Nicht, dass ich da Ahnung davon hätte, aber kann es sein, dass die auszuführende Funktion über ihren Namen angesprochen werden soll?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#5

Re: C nach Pascal

  Alt 26. Dez 2008, 13:20
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
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: C nach Pascal

  Alt 26. Dez 2008, 14:47
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
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#7

Re: C nach Pascal

  Alt 26. Dez 2008, 15:09
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
array[0 .. MAX_ARP_ENTRY-1] gemeint.
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: C nach Pascal

  Alt 26. Dez 2008, 15:20
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: C nach Pascal

  Alt 26. Dez 2008, 15:32
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: C nach Pascal

  Alt 26. Dez 2008, 17:34
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.
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