Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2010, 13:12   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Перевод структуры CPP => DELPHI

Разбираюсь в структуре формата bmp, мелкомягкие как всегда не заботятся о DELPHI программистах - весь код на Си. Саму структуру перевел, а одну строку не знаю, как объяснить, прошу помощи:

Вариант мелкомягких:
Код:
typedef struct tagBITMAPFILEHEADER 
{ 
  WORD    bfType; 
  DWORD   bfSize; 
  WORD    bfReserved1; 
  WORD    bfReserved2; 
  DWORD   bfOffBits; 
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
Мой вариант:
Код:
tagBITMAPFILEHEADER  = Record
 bfType      : Word;
 bfSize      : LongWord;
 bfReserved1 : Word;
 bfReserved2 : Word;
 bfOffBits   : LongWord;
End;
Вопрос таков: как перевести строку "BITMAPFILEHEADER, *PBITMAPFILEHEADER;"?
Ну и маленькое уточнение: правильно ли я привел типы данных по WORD и DWORD? В смысле они со знаком или нет? Я сделал без знака, но правильно ли это?
И еще маленькое уточнение: я тут в одной из структур узрел LONG - оно со знаком или без?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 14.02.2010 в 13:15.
Alex Cones вне форума Ответить с цитированием
Старый 14.02.2010, 13:37   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
type
 tagBITMAPFILEHEADER = packed record
   bfType: WORD;
   bfSize: DWORD;
   bfReserved1: WORD;
   bfReserved2: WORD;
   { или же просто
   bfReserved: DWORD; }
   bfOffBits: DWORD;
 end;
 BITMAPFILEHEADER = tagBITMAPFILEHEADER;
 PBITMAPFILEHEADER = ^BITMAPFILEHEADER;
Да и вроде же в windows.pas это все есть.

p.s. на дельфи уже давно не писал, так что возможно мелкие синтаксические помарочки.
BOBAH13 вне форума Ответить с цитированием
Старый 14.02.2010, 13:44   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Так, а что можно сказать насчет LONG? Его нет в Windows.pas.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 14.02.2010, 14:00   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Так, а что можно сказать насчет LONG? Его нет в Windows.pas.
Причем LONG к BITMAPFILEHEADER ? Я вообще не пойму. Ну да ладно, а если такая проблема что не знаете сколько какой тип "весит" в байтах, справки и сеть уже отменили что ли ? Найти сколько "весит" определенный тип в Delphi (тем более) это дело пары минут.

Edit:
К примеру смотреть тут
BOBAH13 вне форума Ответить с цитированием
Старый 14.02.2010, 14:04   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Причем LONG к BITMAPFILEHEADER ?
Код:
typedef struct tagBITMAPINFOHEADER{
  DWORD  biSize; 
  LONG   biWidth; 
  LONG   biHeight; 
  WORD   biPlanes; 
  WORD   biBitCount; 
  DWORD  biCompression; 
  DWORD  biSizeImage; 
  LONG   biXPelsPerMeter; 
  LONG   biYPelsPerMeter; 
  DWORD  biClrUsed; 
  DWORD  biClrImportant; 
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
Цитата:
Ну да ладно, а если такая проблема что не знаете сколько какой тип "весит" в байтах, справки и сеть уже отменили что ли ?
Я знаю, что он весит 32 бита, но это не решает проблемы - 32 бита могут быть знаковыми\беззнаковыми\дробными\цел ыми и проч.
Цитата:
К примеру смотреть тут
А вот за это спасибо.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 16.02.2010, 00:39   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

long в чистом С
32 бита...знаковое(ибо long и signed long это одно и тоже) = LongInt
DWORD - unsigned long(в 32-битном компиле может быть и unsigned int)
оно же LongWord в Делфи

вот ULONG(напомню что в С регистр имеет значение) это уже unsigned long
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трёхзвенные структуры Delphi. pokerBORODA Фриланс 2 02.02.2010 17:58
Перевод из Delphi в C++ SunShine Помощь студентам 0 15.12.2009 20:40
delphi алгоритм развлетвляющей структуры world12_tk Помощь студентам 11 13.09.2009 19:52
Перевод Delphi на C++ Игорь777 Помощь студентам 2 01.05.2009 16:28
Проблема структуры else в Delphi jora-objora Помощь студентам 3 03.02.2008 18:10