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

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

Вопросы в переводе заголовочника с Си на Паскаль [D7, XP]


Торри ©   (2015-05-08 10:17:00) 

Добрый день. Может кто-то подскажет.
Необходимо перевести заголовочник с Си на Паскаль, вот фрагмент:

typedef enum { A = 0, B = 1, ... } someType;
typedef struct { UINT32 A; someType B; BOOL C; } someStruct;
someType someFunction(someType var1, someStruct *var2, someType *var3, const someStruct *var4);


Собственно вопросы...
Си знаю только синтаксис, что именно означает "const"? Там же указатель. Равноценное объявление в Паскале как будет?
Как мне узнать размеры enum-переменной в байтах? Какой тип лучше использовать чтоб полностью соответствовал?
Record или Packed Record?


  (2015-10-20 20:14:00) [1]

Удалено модератором


Торри   (2015-05-12 00:49:00) [2]

Спасибо огромное! Будем изучать и пробовать!


> Либо вообще не используй ENUM он тут необязателен, прекрасно заменяется на константы.


Хотелось бы сохранить оригинальную структуру, но подумаю, возможно так будет даже проще.


Ega23   (2015-05-09 00:16:00) [3]


> В сишном варианте не указано ни выравнивание ни упаковка.


Я так понимаю, что это можно прагмами в хидерах сделать. Хотя в сях не силён.


DVM   (2015-05-08 14:48:00) [4]


> Игорь Шевченко ©   (08.05.15 13:49) [6]


> в Си 4 байта для перечислимых типов (в 32-х разрядном коде)
>

Точнее будет сказать он равен SizeOf(int). А уж чему равен int зависит от платформы.


> Ega23 ©   (08.05.15 10:33) [3]


> Если выравнивание важно, то packed

Скорее если нужна упаковка, то надо packed. Если же выравнивание важно, то надо указывать тип выравнивания. В сишном варианте не указано ни выравнивание ни упаковка. Требуется уточнение.


> Торри   (08.05.15 12:31) [4]


> А вот и нет))) В Делфи говорит 1 байт. Подозреваю что в
> Си как раз 4 байта, отсюда и нестыковка...

Ну так сделай либо в Delphi так как в C:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsminimumenumerationsize_xml.html

Либо вообще не используй ENUM он тут необязателен, прекрасно заменяется на константы.

Аналогично можно в Delphi задать тип выравнивания:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Align_fields_(Delphi)


Игорь Шевченко   (2015-05-08 13:49:00) [5]

Торри   (08.05.15 12:31) [4]


> Мне же надо узнать сколько размер в Си, и сделать такое
> же объявление для Паскаля


в Си 4 байта для перечислимых типов (в 32-х разрядном коде)


> Указатель на указатель что ли получится?


Нет, получится просто указатель


Торри   (2015-05-08 12:43:00) [6]


> Игорь Шевченко ©   (08.05.15 10:31) [2]
> Pointer


Указатель на указатель что ли получится?


Торри   (2015-05-08 12:31:00) [7]


> Ega23 ©   (08.05.15 10:33) [3]
> SizeOf(someType)
> Если выравнивание важно, то packed


Да не... Это-то понятно, в Делфи я это сразу же сделал, а вот в Си не могу - у меня ни IDE ни компиляторов, только *.h файл.
Мне же надо узнать сколько размер в Си, и сделать такое же объявление для Паскаля.
Про packed тоже само собою разумеется, но как мне узнать важно или нет? Как оно в Си сработает?


> Игорь Шевченко ©   (08.05.15 10:31) [2]
> 4 байта


А вот и нет))) В Делфи говорит 1 байт. Подозреваю что в Си как раз 4 байта, отсюда и нестыковка...


Ega23   (2015-05-08 10:33:00) [8]


> Как мне узнать размеры enum-переменной в байтах?


SizeOf(someType)


> Record или Packed Record?


Если выравнивание важно, то packed


Игорь Шевченко   (2015-05-08 10:31:00) [9]


> Как мне узнать размеры enum-переменной в байтах?


4 байта


> Какой тип лучше использовать чтоб полностью соответствовал?
>
> Record или Packed Record?


packed record


> что именно означает "const"? Там же указатель. Равноценное
> объявление в Паскале как будет?


Pointer


Торри   (2015-05-08 10:22:00) [10]


> Как мне узнать размеры enum-переменной в байтах?


узнать/задать в Си/Паскале


Наверх

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