Мне недавно пришлось работать с различными размерами по умолчанию, используемыми для перечислений в Delphi и C++, так как я должен использовать dll C++ из приложения delphi.О перечислениях в Delphi и C++ в 64-разрядных средах
Один вызов функции возвращает массив структур (или записей в delphi), первым элементом которого является перечисление.
Для выполнения этой работы я использую упакованные записи (или выровненные (1) -структуры). Однако, поскольку delphi динамически выбирает размер переменной enum по умолчанию и использует наименьший тип данных (он был байтом в моем случае), но C++ использует int для перечислений, мои данные не были правильно интерпретированы.
Delphi предлагает переключатель компилятора, чтобы обойти это, поэтому декларация перечисления становится
{$Z4}
TTypeofLight =
(
V3d_AMBIENT,
V3d_DIRECTIONAL,
V3d_POSITIONAL,
V3d_SPOT
);
{$Z1}
Мои вопросы:
- Что будет с моими структурами, когда они составлены на/для 64-битной среды?
- Увеличивает ли значение по умолчанию целое число C++ до 8 байтов?
- Существуют ли другие модификации размера/размера данных (кроме указателей)?
Благодарим вас за ввод. +1 – sum1stolemyname
(есть некоторые мэйнфреймы, которые являются ILP64, iow integer = 64-бит, но вы вряд ли столкнетесь с ними, используя простой Delphi) –