注意:调用win32 API时,应避免结构使用子界类型来定义(对于类型大小超过1字节时,)(0)

H

hxy2002

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi7 发现问题2.避免使用子界类型Pascal语言的一大优势便是其丰富的数据类型Delphi之Object Pascal继承了这一传统枚举和子界类型即属此类但不幸的是他们会为优化带来麻烦因为它们的占用的字节数取决于其子界的大小比如一个元素数不超过256个的枚举类型会占用1 个字节而例如MyYear=1900..2000则会占用两个字节而如前文所述16位变量是很慢的这是ZwQuerySystemInformation中线程结构的定义 THREAD_STATE = ( StateInitialized, StateReady, StateRunning, StateStandby, StateTerminated, StateWait, StateTransition, StateUnknown); _SYSTEM_THREADS = record KernelTime: LARGE_INTEGER; UserTime: LARGE_INTEGER; CreateTime: LARGE_INTEGER; WaitTime: ULONG; StartAddress: PVOID; ClientId: CLIENT_ID; Priority: KPRIORITY; BasePriority: KPRIORITY; ContextSwitchCount: ULONG; State: ULONG; //正确的 WaitReason: ULONG; //正确的 //State: THREAD_STATE; 注意这边如果是子界,可能类型会变小,用ULONG固定住就没问题, //WaitReason: KWAIT_REASON; end;
 
win32 API 都是常量,根本不能使用枚举子界来代替,完全两码事
 
顶部