Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1283282748
Sam Bellamy
2010-08-31 23:25
2017.08.27
активирование приложения, SDI


2-1427276393
Ega23
2015-03-25 12:39
2017.08.27
Передача массива вариантов в функцию


3-1314713126
tomkat
2011-08-30 18:05
2017.08.27
Экранировать % в FireBird


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)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский