![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Портирование из сишного файла, проверьте правильность
trubin © (2008-01-27 20:26:00)typedef enum _STORAGE_MEDIA_TYPE {
DDS_4mm = 0x20, // Tape - DAT DDS1,2,... (all vendors)
CD_ROM, // Opt_Disk - CD
CD_R, // Opt_Disk - CD-Recordable (Write Once)
CD_RW, // Opt_Disk - CD-Rewriteable
DVD_ROM, // Opt_Disk - DVD-ROM
DVD_R, // Opt_Disk - DVD-Recordable (Write Once)
DVD_RW // Opt_Disk - DVD-Rewriteable
} STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
typedef enum _STORAGE_BUS_TYPE {
BusTypeUnknown = 0x00,
BusTypeScsi,
BusTypeAtapi,
BusTypeAta,
BusType1394,
BusTypeSsa,
BusTypeFibre,
BusTypeUsb,
BusTypeRAID,
BusTypeMaxReserved = 0x7F
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
typedef struct _DEVICE_MEDIA_INFO {
union {
struct {
LARGE_INTEGER Cylinders;
STORAGE_MEDIA_TYPE MediaType;
DWORD TracksPerCylinder;
DWORD SectorsPerTrack;
DWORD BytesPerSector;
DWORD NumberMediaSides;
DWORD MediaCharacteristics; // Bitmask of MEDIA_XXX values.
} DiskInfo;
struct {
LARGE_INTEGER Cylinders;
STORAGE_MEDIA_TYPE MediaType;
DWORD TracksPerCylinder;
DWORD SectorsPerTrack;
DWORD BytesPerSector;
DWORD NumberMediaSides;
DWORD MediaCharacteristics; // Bitmask of MEDIA_XXX values.
} RemovableDiskInfo;
struct {
STORAGE_MEDIA_TYPE MediaType;
DWORD MediaCharacteristics; // Bitmask of MEDIA_XXX values.
DWORD CurrentBlockSize;
STORAGE_BUS_TYPE BusType;
union {
struct {
BYTE MediumType;
BYTE DensityCode;
} ScsiInformation;
} BusSpecificData;
} TapeInfo;
} DeviceSpecific;
} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
////////////////////////////////////////////////////////////////////////////
PSTORAGE_MEDIA_TYPE = ^STORAGE_MEDIA_TYPE;
STORAGE_MEDIA_TYPE = (
DDS_4mm = $20, // Tape - DAT DDS1,2,... (all vendors)
CD_ROM, // Opt_Disk - CD
CD_R, // Opt_Disk - CD-Recordable (Write Once)
CD_RW, // Opt_Disk - CD-Rewriteable
DVD_ROM, // Opt_Disk - DVD-ROM
DVD_R, // Opt_Disk - DVD-Recordable (Write Once)
DVD_RW // Opt_Disk - DVD-Rewriteable
);
PSTORAGE_BUS_TYPE = ^STORAGE_BUS_TYPE;
STORAGE_BUS_TYPE = (
BusTypeUnknown = $00,
BusTypeScsi,
BusTypeAtapi,
BusTypeAta,
BusType1394,
BusTypeSsa,
BusTypeFibre,
BusTypeUsb,
BusTypeRAID,
BusTypeMaxReserved = $7F
);
Common_Disk_Info = record
Cylinders: LARGE_INTEGER;
MediaType: STORAGE_MEDIA_TYPE;
TracksPerCylinder: DWORD;
SectorsPerTrack: DWORD;
BytesPerSector: DWORD;
NumberMediaSides: DWORD;
MediaCharacteristics: DWORD; // Bitmask of MEDIA_XXX values.
end;
Scsi_Information = record
MediumType: BYTE;
DensityCode: BYTE;
end;
Bus_Specific_Data = record
ScsiInformation: Scsi_Information;
end;
Tape_Info = record
MediaType: STORAGE_MEDIA_TYPE;
MediaCharacteristics: DWORD; // Bitmask of MEDIA_XXX values.
CurrentBlockSize: DWORD;
BusType: STORAGE_BUS_TYPE;
BusSpecificData: Bus_Specific_Data;
end;
Device_Specific = record
DiskInfo: Common_Disk_Info;
RemovableDiskInfo: Common_Disk_Info;
TapeInfo: Tape_Info;
end;
Device_Media_Info = record
DeviceSpecific: Device_Specific;
end;
PGET_MEDIA_TYPES = ^GET_MEDIA_TYPES;
GET_MEDIA_TYPES = record
DeviceType: DWORD;
MediaInfoCount: DWORD;
MediaInfo: array [0..0] of Device_Media_Info;
end;
Можно видимо обойтись без типов Bus_Specific_Data и Device_Specific
Riply (2008-01-27 22:03:00) [21]> [2] Рамиль © (27.01.08 20:54)
> packed record
Ой не факт. Столько раз нарывалась с этим выравниванием, и не сосчитаешь :)
> иначе, если это будет передаваться в функции dll неизвестного происхождения, могут быть проблемы.
Проблеммы могут быть и с packed record. IMHO, в каждом случае надо подходить индивидуально,
с оглядкой на "функции dll неизвестного происхождения" в которых будет использоваться.
Рамиль (2008-01-27 20:54:00) [22]packed record
иначе, если это будет передаваться в функции dll неизвестного происхождения, могут быть проблемы.
trubin (2008-01-27 20:27:00) [23]Забыл:
typedef struct _GET_MEDIA_TYPES {
DWORD DeviceType;
DWORD MediaInfoCount;
DEVICE_MEDIA_INFO MediaInfo[1];
} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;