AGB  ·  Datenschutz  ·  Impressum  







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

"C" Strukturen in Delphi verwenden

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

Registriert seit: 22. Apr 2008
84 Beiträge
 
#1

"C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 08:54
Hallo zusammen,

ich schreibe z.Z ein Delphi Programm das zum Teil
auf den C-Code von jemand anderen über eine DLL zugreift.
Innerhalb des C-Codes werden Strukturen definiert,
das sieht dann beispielsweise so aus:

Delphi-Quellcode:
typedef struct TTest
{
  char name
  double zahl
  double zahl2
}
TTest;
Auf diese Strukturen möchte ich nun über Funktionen, die einen Pointer
auf diese Strukturen übergeben, zugreifen.

Nun stehe ich irgendwie auf dem Schlauch wie ich Delphi klarmache, dass
sich hinter dem übergebenen Pointer ein C-struct (was ja nichts
anderes als ein Record ist) verbirgt.

An welcher mache ich Delphi bekannt, dass ein Struct im Speicher liegt?
Vielleicht kann mir jemand mit einem Beispiel helfen


Gruß
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 08:58
Entweder definierst Du typisierte Pointer oder machst einen expliziten Cast.
Typisierte Pointer:
Delphi-Quellcode:
type PTest = ^TTest;
TTest = record
  ...
end;
Cast:ShowMessage(FloatToStr(TTest(Pointervar^).zahl));
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
S20000

Registriert seit: 22. Apr 2008
84 Beiträge
 
#3

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 09:04
Delphi-Quellcode:
type PTest = ^TTest;
TTest = record
  name[0..99] of char;
  ...
end;
Wenn ich das so mache ist PTest ein Zeiger auf Record TTest,
woher ist dem Compiler dann bekannt, dass auf die Daten
im struct zugegriffen wird. Ich kann da noch nicht ganz
folgen.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 09:13
Ok..wenn ich dich richtig verstehe bekommst du einen untypisierten Zeiger von der DLL-Funktion zurück. Der Funktionskopf sieht also ungefähr so aus:

    function MeineDLL_C_Funktion(meinParameter:integer):Pointer; Wenn du einfach das Funktions-Ergebnis einer Variable vom Typ PTest zuweise, weis Delphi wie der Speicher aufgebaut ist und du kannst mithilfe der Dereferenzierung einfach auf die Elemente zugreifen.


P.S. Tutorial zum Thema Zeiger
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.926 Beiträge
 
Delphi 12 Athens
 
#5

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 09:15
Delphi-Quellcode:
type
TTest=record
   name:Char;
   zahl:Double;
   zahl2:Double;
end;
PTest=Test^;
Records sind blöde Speicherschnipsel
Evtl. musst du bei dem Record Packet verwenden.

du kannst genauso gut
Delphi-Quellcode:
type
Test=array[0..sizeof(TTest)] of Byte;
machen


einfach den Pointer dereferenzieren und in irgend einen Typ array oder record der Passenden Größe casten
bzw. den untytpisierten Pointer in einen Typisierten Pointer der passenden Größe casten.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 09:49
Zitat von QuickAndDirty:
Delphi-Quellcode:
type
TTest=record
   name:Char;
   zahl:Double;
   zahl2:Double;
end;
PTest=Test^; //nicht ganz richtig, muss PTest = ^TTest heißen
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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 09:57
Hallo,

bei dem Char wäre is noch wichtig,
ob er nicht char* meint, weil ein Zeichen für den Namen ist ein bissel mickrig.

Das wäre dann in Delphi ein PChar.


Heiko
Heiko
  Mit Zitat antworten Zitat
S20000

Registriert seit: 22. Apr 2008
84 Beiträge
 
#8

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 10:03
Ich mache nochmal ein konkretes Beispiel
weil ich glaube das es sich doch um typisierte Zeiger handelt.
Ich werfe diese Begrife immer noch durcheinander.

Delphi-Quellcode:
//C-Code

typedef struct TTest
{
  char name[100];
  int  zahl1;
}
TTest;

typedef struct Namen
{
TInfo *namen;    // wird wird ein dynamisches Array angelegt
}
Was hier nach meinem Verständnis gemacht wird ist ein
Zeiger auf TInfo. Dieser Zeiger kann man (In C) mit einem
Index versehen. Es gibt also eine Menge von TTest structs.

Auf diese structs möchte ich nun in Delphi zugreifen...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 13:30
Hallo,

zuerst mal fehlt dir in der struct Namen noch ein

int iCount

sonst weisst du nicht, wie viele im Array sind.

Zum Zugriff würde ich einen Hilfspointer benutzten.

Delphi-Quellcode:
type
  TTInfo: packed record
    name: array[0..100] of Char;
    zah1: Integer;
  end;
  PInfo = ^TInfo;

var
  P: Pointer;
  MyPInfo: PInfo;
begin
 // 1. Element
  P:= PInfo(Namen.namen);

 // Zugriff
  PInfo:= P;
  PInfo^.zahl // Zugriff

 // 2. Element
  P:= PInfo(Namen.namen+SizeOf(TInfo)); // noch + 1 , enfach mal probieren
  PInfo:= P;
  PInfo^.zahl // Zugriff
Falls Delphi bei den Zeigern meckert, nimm statt Pointer PChar.


Heiko
Heiko
  Mit Zitat antworten Zitat
S20000

Registriert seit: 22. Apr 2008
84 Beiträge
 
#10

Re: "C" Strukturen in Delphi verwenden

  Alt 26. Jun 2008, 16:23
Zitat:
..sonst weisst du nicht, wie viele im Array sind.
Da wurde die Vereinbarung getroffen, dass der letzte Name
mit #0 versehen ist.
  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 17:22 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