Небольшое отклонение от темы.
FreePascal, VirtualPascal, Delphi — проблемы нет, PACKED справляется с записями и массивами. То же самое с соглашениями о вызове. Все их применяют, но лишь стандарт С++ не знает об их существовании. Если целевая платформа не поддерживает определённое соглашение (разрядность, операцию умножения или любой другой элемент ЯП) достаточно выдать ошибку компиляции. Но STDCALL — он и в Африке STDCALL.
Я сперва использовал __declspec(alegn(1)), потом перешёл на #pragma pack(push, 1) из-за разичий в GCC и Студии.