Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C => Delphi] Was macht FIELD_OFFSET? (https://www.delphipraxis.net/72145-%5Bc-%3D-delphi%5D-macht-field_offset.html)

Daniel G 26. Jun 2006 12:21


[C => Delphi] Was macht FIELD_OFFSET?
 
Mahlzeit,

ich sehe mich gerade mit einem C - Code konfrontiert, in dem u.a. Folgender Code steht (Nach Delphi übersetzt):

Delphi-Quellcode:
var
PT: SCSI_PASS_THROUGH_WITH_BUFFERS;
begin
// für ATA eigentlich unnötige SCSI-Parameter angeben
PT.spt.Length          := sizeof(SCSI_PASS_THROUGH);
PT.spt.PathId          := 0;
PT.spt.TargetId        := 1;
PT.spt.Lun             := 0;
PT.spt.CdbLength       := CDB10GENERIC_LENGTH;
PT.spt.SenseInfoLength := 24;
PT.spt.TimeOutValue    := 2;
PT.spt.SenseInfoOffset := FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
 
// Position der eigentlichen Daten
PT.spt.DataBufferOffset := FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf);
ZeroMemory(PT.ucDataBuf, sizeof(PT.ucDataBuf));
Das ganze ist ein Code, der sich um das AAM von Festplatten kümmert.
Mich würde mal interessieren, was diese Zeile macht:
Delphi-Quellcode:
FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
Zu FIELD_OFFSET habe ich nur das hier im PSDK gefunden:
Zitat:

Access all window and class data using FIELD_OFFSET.
It is common to access window data using hard-coded offsets. This technique is not portable to 64-bit Windows. To make your code portable, access your window and class data using the FIELD_OFFSET macro. Do not assume that the second pointer has an offset of 4.
Meine Fragen:

In welcher Headerdatei ist dieses Macro deklariert?
Gibt es ein Delphi - Äquivalent?

ste_ett 26. Jun 2006 12:31

Re: [C => Delphi] Was macht FIELD_OFFSET?
 
WINNT.H :)

Code:
// Calculate the byte offset of a field in a structure of type type.
//

#define FIELD_OFFSET(type, field)   ((LONG)(INT_PTR)&(((type *)0)->field))
- edit -

INT_PTR ist folgendermassen deklariert:
Code:
typedef long INT_PTR, *PINT_PTR;

MagicAndre1981 26. Jun 2006 12:33

Re: [C => Delphi] Was macht FIELD_OFFSET?
 
Zitat:

Zitat von Daniel G
In welcher Headerdatei ist dieses Macro deklariert?

In der Winnt.h

Code:
//
// Calculate the byte offset of a field in a structure of type type.
//

#define FIELD_OFFSET(type, field)   ((LONG)(LONG_PTR)&(((type *)0)->field))

Daniel G 26. Jun 2006 12:34

Re: [C => Delphi] Was macht FIELD_OFFSET?
 
ah, ok, danke...


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