Dav*_*nan 21 delphi delphi-xe2
Delphi XE2的新功能包含以下内容.
现在打包强制字节对齐记录
如果您的遗留代码使用打包记录类型,并且您想要与外部DLL或C++链接,则需要从代码中删除"packed"一词.packed关键字现在强制字节对齐,而在过去它不一定这样做.行为更改与Delphi 2009中的C++对齐兼容性更改有关.
我不明白这一点.我正在努力解决这一问题:而在过去,它并不一定会这样做.我无法调和的是,压缩总是导致记录的字节对齐,据我所知.任何人都可以给出一个非字节对齐的打包记录的例子吗?显然,这必须是早期版本.
为什么文档说"如果你想与外部DLL或C++链接,你需要删除代码中的单词"?如果外部代码使用了#pragma pack(1)那么如果打包是非限制我们该怎么办?
$ALIGN指令怎么样?是{$A1} and {$A-}相当于packed或者是有一些额外的意义与packed?
我似乎错过了一些东西,如果有人能够解释这一点,我会很感激.或者文档真的很差?
更新
我有理由相信文档是指记录本身的对齐而不是记录的布局.这是一个小程序,它表明packed记录的使用强制记录的对齐为1.
program PackedRecords;
{$APPTYPE CONSOLE}
type
TPackedRecord = packed record
I: Int64;
end;
TPackedContainer = record
B: Byte;
R: TPackedRecord;
end;
TRecord = record
I: Int64;
end;
TContainer = record
B: Byte;
R: TRecord;
end;
var
pc: TPackedContainer;
c: TContainer;
begin
Writeln(NativeInt(@pc.R)-NativeInt(@pc.B));//outputs 1
Writeln(NativeInt(@c.R)-NativeInt(@c.B));//outputs 8
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
这在Delphi 6,2010,XE和XE2 32位和XE 64位上产生相同的输出.
| 归档时间: |
|
| 查看次数: |
3894 次 |
| 最近记录: |