type {$Z+}// 4字节 TMyEnum = (.....); {$Z-} // 还原1字节{$A4} // 4字节对其 TMyRecord = record ..... end;{$A-} //还原
C和DELPHI里都定义为压缩型的,就可以了吧?
type TEnumType = (etElement_0,etElement_1,...);//正常的定义默认为一个字节,但是枚举类的成员的值是可以显式定义的,所以可以通过显式定义一个形式成员,用于撑大占位两字节占位 type TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fff);//正常的定义四字节占位 type TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fffffff);//正常的定义
添加一个Timer控件,然后双击Timer,写入以下代码:if Win32Platform = VER_PLATFORM_WIN32_NT then SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); application.ProcessMessages
{$MINENUMSIZE 4} 4个字节枚举
{$MINENUMSIZE 4} 4个字节枚举请问这个在哪里定义?谢谢
{$Z+}// 4字节 TMyEnum = (.....); {$Z-} // 还原1字节{$A4} // 4字节对其 TMyRecord = record
.....
end;{$A-} //还原
TEnumType = (etElement_0,etElement_1,...);//正常的定义默认为一个字节,但是枚举类的成员的值是可以显式定义的,所以可以通过显式定义一个形式成员,用于撑大占位两字节占位
type
TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fff);//正常的定义四字节占位
type
TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fffffff);//正常的定义
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages
将{$Z4}
插入到要和C交互的枚举类型的声明中。
type
{$Z4}// 4字节 TMyEnum = (ENUM1,ENUM2,...); {$Z1} // 还原1字节
对齐的意义在这里不大,靠边界对齐反而会使得数据的解释错误。
因为Intel的数据是小端对齐的,按边界对齐解读反而正好把数据读反了。
关键还是修改数据存储类型。