Нет никакого способа заставить VB6 не заполнять UDT, подобно директиве #pragma pack, доступной во многих компиляторах C / C ++, но вы можете сделать это наоборот.
Согласно Q194609 Visual Basic использует выравнивание по 4 байта и
Visual C ++ использует 8 байтов по умолчанию.
При использовании VB6 для вызова библиотеки C DLL я использовал заголовочные файлы MS "pshpack4.h" для обработки выравнивания, потому что разные компиляторы делают это по-разному, как показано в этом (довольно отредактированном) примере:
// this is in a header file called vbstruct.h
...
# define VBSTRING char
# define VBFIXEDSTRING char
# define VBDATE double
# define VBSINGLE float
# ifdef _WIN32
# define VBLONG long
# define VBINT short
# else // and this was for 16bit code not 64bit!!!!
# define VBLONG long
# define VBINT int
# endif
...
# include "pshpack4.h"
...
typedef struct VbComputerNameStruct
{
VBLONG sName;
VBSTRING ComputerName[VB_COMPUTERNAME_LENGTH];
} VbComputerNameType;
typedef struct VbNetwareLoginInfoStruct
{
VBLONG ObjectId;
VBINT ObjectType;
VBSTRING ObjectName[48];
} VbNetwareLoginInfoType;
...
# include "poppack.h"