Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.08.27;
Скачать: CL | DM;

Вниз

Вопросы в переводе заголовочника с Си на Паскаль   Найти похожие ветки 

 
Торри   (2015-05-08 10:17) [0]

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

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-05-08 10:22) [1]


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


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


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


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


4 байта


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


packed record


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


Pointer


 
Ega23 ©   (2015-05-08 10:33) [3]


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


SizeOf(someType)


> Record или Packed Record?


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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


 
DVM ©   (2015-05-08 14:48) [7]


> Игорь Шевченко ©   (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)


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


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


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


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

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


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


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


 
имя   (2015-10-20 20:14) [10]

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



Страницы: 1 вся ветка

Текущий архив: 2017.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
2-1426143698
Atamali Memmedov
2015-03-12 10:01
2017.08.27
Exception


2-1400915101
zigzac
2014-05-24 11:05
2017.08.27
Лишняя запись в БД и ошибка (Pascal)


15-1464608311
SergP
2016-05-30 14:38
2017.08.27
Передача параметров функции


1-1352975235
yurikon
2012-11-15 14:27
2017.08.27
Доступ к массиву по ключу


2-1431069430
Торри
2015-05-08 10:17
2017.08.27
Вопросы в переводе заголовочника с Си на Паскаль