Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вопрос по Record Packed


Автор: Ak47black 7.1.2007, 14:45
Привет всем.
Хочю убедиться что делаю структуру правильно.
Работаю с Avi форматом и например вот код на C
Код

typedef struct _avistreamheader {
     FOURCC fcc;
     DWORD  cb;
     FOURCC fccType;
     FOURCC fccHandler;
     DWORD  dwFlags;
     WORD   wPriority;
     WORD   wLanguage;
     DWORD  dwInitialFrames;
     DWORD  dwScale;
     DWORD  dwRate;
     DWORD  dwStart;
     DWORD  dwLength;
     DWORD  dwSuggestedBufferSize;
     DWORD  dwQuality;
     DWORD  dwSampleSize;
     struct {
         short int left;
         short int top;
         short int right;
         short int bottom;
     }  rcFrame;
} AVISTREAMHEADER;

Перевожу на Delphi 
Код

  TrcFrame = packed record
   left: Integer;
    top: Integer;
    right: Integer;
    bottom: Integer;
  end;

  TAviStreamHeader = packed record
     fccType: DWORD;
     fccHandler: DWORD;
     dwFlags: DWORD;
     wPriority: WORD;
     wLanguage: WORD;
     dwInitialFrames: DWORD;
     dwScale: DWORD;
     dwRate: DWORD;
     dwStart: DWORD;
     dwLength: DWORD;
     dwSuggestedBufferSize: DWORD;
     dwQuality: DWORD;
     dwSampleSize: DWORD;
     rcFrame: TrcFrame;
  end;

Правильно я делаю?
И еше вопрос по этой теме - можно ли в Delphi сделать какбы - Структура в структуре как это сделано в на C ?

Добавлено @ 14:46 
Код

     FOURCC fcc;
     DWORD  cb;

эти два поля я пропускаю.

Автор: MetalFan 7.1.2007, 16:29
зачем пропускаешь два поля???? зря.

Код

  TRec = record
    a1: Integer;
    rec2: record
      b2: Integer;
      b3: Integer;
    end;
  end;


а кто так мешает написать?

Автор: Ak47black 7.1.2007, 17:12
Да  smile . Вот это я и хотел сделать только незнал как!!!
Спасибо +

Автор: Beltar 7.1.2007, 17:14
А зачем именно packed? Тем более тут в структуре поля 4-хбайтные.

Автор: Ak47black 7.1.2007, 17:17
Добавлено @ 17:27 
Ну написано
Код

The Packed keyword tells Delphi to minimise the storage taken up by the defined object. 
Normally, complex data types, such as records have their elements aligned to 2, 4 or 8 byte boundaries, as appropriate to the data type. For example, a Word field would be aligned to a 4 byte boundary. 

Вроде-же надо при всех случаях когда сшитываеться структура файла?(если он невыравнимается), я правильно понимаю?

Автор: Alexeis 7.1.2007, 21:13
Цитата(Ak47black @  7.1.2007,  17:17 Найти цитируемый пост)
Вроде-же надо при всех случаях когда сшитываеться структура файла?(если он невыравнимается), я правильно понимаю?


Зависит от описания формата. Вообще Avi - это RIFF, насколько я помню для него требуется выравнивание на границу 2х байт.

Автор: Ak47black 8.1.2007, 00:39
Да верно это RIFF и там выравнивание на границу 2х байт.
Ок спасиба.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)