Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Портирование из сишного файла, проверьте правильность


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо