摘要:
Delphi 2009+ 的 System.SysUtils提供了一个类似.Net的StringBuilder,用于存储字符数组。很多人不明白为什么要用TStringBuilder, Delphi中有string,有几乎所有TStringBuilder的功能函数,System.SysUtils中还有TStringHelper方便扩展String,更方便String的使用。从Delphi提供的源码看,TStringBuilder与string最大的区别是,TStringBuilder是可以预先申请了内存空间,并限制最大内存空间,不会自动释放,而string是用多少申请多少内存,自动释放。由此可见 阅读全文
摘要:
Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GBDelphi XE5安装光盘中包含了最基本的Android开发的环境文件,但是并没有提供Android模拟机。我们需要安装Android的SDK后生成Android模拟机,安装步骤:1.到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK1.7安装2.到http://developer.android.com/sdk/index.html下载Andr 阅读全文
摘要:
我们知道Delphi的每个对象可以包含多个Property,Property中可以是方法,例如TButton.OnClick属性。Delphi提供的仅仅是 一对一的设置,无法直接让TButton.OnClick去调用多个方法,而Java中采用Listener模式有类似AddListener方法提供多 阅读全文
摘要:
TValue是Delphi的RTTI系统的重要类型。 经过摸索,发现TValue功能强大,可以实现很多功能。本文章中所有程序采用XE3运行通过。一、TValue结构TValue定义在System.Rtti.pasTValue = record ...private FData: TValueDataend;TValue提供了一些系列方法,几乎都是操作FData.TValueData描述如下: TValueData = record FTypeInfo: PTypeInfo; // FValueData vs old FHeapData: // FHeapData doub... 阅读全文
摘要:
Delphi自从增强了RTTI后,语言的可灵活性多大增强,Delphi的dbExpress中提供了DBXJSON,和DBXJSONReflect两个单元,可提供JSON序列化下面的例子是实现Delphi实体对象转换为JSON字符串,以及JSON字符串转换为Delphi 实体对象的示例:(在Delphi XE3测试通过) 1 unit Unit2; 2 3 interface 4 5 uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, V... 阅读全文
摘要:
Delphi使用模块化开发,可以采用DLL或者BPL,两者的区别是BPL只能被同版本的Delphi使用,DLL可以被不同版本和不同开发工具的开发的软件调用。因此我们的软件大多使用Delphi作为界面以及部分DLL模块的开发工具。DLL模块之间通过接口方式调用。1.对象创建采用工厂模式,每个DLL负责某个对象或若干个对象的创建及释放,例如:DLL工程为http客户端(prjHttp.DLL)模块,通过DLL导出的GetHttpClientFactory获取http客户端工厂接口,通过接口创建Http客户端和释放Http客户端,工程包括3个文件:工程文件,实现单元,接口单元。调用此DLL的程序仅需 阅读全文
摘要:
在X86下,C语言函数调用,使将参数从右到左压入堆栈,栈指针减小,最后一个参数压入后,栈指针指向最后一个参数因此我们可以通过增加栈指针,读取所有的参数,X86CPU的堆栈是4字节对齐,也就是说字节性或者字型参数都是压入4字节。type TArgPtr =record private FArgPtr: PByte;classfunction Align(Ptr: Pointer; Align: Integer): Pointer; static; public constructor Create(LastArg: Pointer; Size: Integer); // ... 阅读全文