摘要: TMarshaller(结构) 基于 TMarshal(是有一大堆的 class 方法组成的类) 实现.TMarshaller 可以对缓存区进行自动(自动释放)安全地管理, TMarshal 也有前者没有的重要方法, 譬如: TMarshal.Copy() 方法.有了它们, 以后关于内存缓冲区, 字符串转码等操作就更方便了.{测试}procedure TForm1.FormCreate(Sender: TObject);var M: TMarshaller; pw: TPtrWrapper; str: string; bs: TBytes;begin bs := BytesOf('万. 阅读全文
posted @ 2013-06-10 18:27 万一 阅读(2422) 评论(0) 推荐(0) 编辑
摘要: TMemoryStream 的 Position 变化后, 我曾经认为它的 Memory 属性也会变化; 只怪不看源码, 只想当然!procedure TForm1.FormCreate(Sender: TObject);var Stream1,Stream2: TMemoryStream; pw: TPtrWrapper;begin Stream1 := TStringStream.Create('1234567890'); Stream2 := TStringStream.Create('ABCDEFGHIJ'); //想把 Stream1 变成 123DE 阅读全文
posted @ 2013-06-10 12:38 万一 阅读(3864) 评论(1) 推荐(0) 编辑
摘要: 不知什么时候 System 单元有了 TPtrWrapper 结构体, 它提供了非常小的一点功能: 指针(Pointer)与指针地址(NativeInt)的转换.很显然, 以前常用的 Integer(P) 或 Ptr(Number) 已经不适用与 64 位了, 这时使用 TPtrWrapper 应该是更方便,更保险的选择.发现在 Delphi 新的源码中, 几乎就把 TPtrWrapper 当做指针来使用了.{TPtrWrapper 全功能测试}procedure TForm1.FormCreate(Sender: TObject);var num: Integer; p: Pointer.. 阅读全文
posted @ 2013-06-10 12:14 万一 阅读(1737) 评论(3) 推荐(0) 编辑