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