Форум: "Начинающим";
Текущий архив: 2017.08.27;
Скачать: [xml.tar.bz2];
ВнизВопросы в переводе заголовочника с Си на Паскаль Найти похожие ветки
← →
Торри (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c