![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы в переводе заголовочника с Си на Паскаль [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-переменной в байтах?
узнать/задать в Си/Паскале