![]() |
[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:
Das ganze ist ein Code, der sich um das AAM von Festplatten kümmert.
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)); Mich würde mal interessieren, was diese Zeile macht:
Delphi-Quellcode:
Zu FIELD_OFFSET habe ich nur das hier im PSDK gefunden:
FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
Zitat:
In welcher Headerdatei ist dieses Macro deklariert? Gibt es ein Delphi - Äquivalent? |
Re: [C => Delphi] Was macht FIELD_OFFSET?
WINNT.H :)
Code:
- edit -
// Calculate the byte offset of a field in a structure of type type.
// #define FIELD_OFFSET(type, field) ((LONG)(INT_PTR)&(((type *)0)->field)) INT_PTR ist folgendermassen deklariert:
Code:
typedef long INT_PTR, *PINT_PTR;
|
Re: [C => Delphi] Was macht FIELD_OFFSET?
Zitat:
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)) |
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