已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
delphi 变体类型(variant)的介绍(流与变体类型的相互转换变体类型常用的函数 一、变体类型常用的函数介绍: Variant: 一种可以拥有各种数据类型; 也可以告诉目前存储的数据是什么类型(通过使用VarType函数); 可以给相同的Variant分配不同的数据类型,只要Variant包含数字值就可以执行算法; variant数组只不过是variant型的数组,不必包含同类型的数据;1、 VarArrayOf函数:更快捷的创建一维变体数组,可以创建全异的数值数组;function VarArrayOf(const Values: array of Variant): Variant; VarArrayOf是一种快速(写代码快而不是运行快)的方法生成一个一维Variant数据的方法,它接受一个Variant类型的Open Array,用这个数据生成一个一维的Variant Array of Variant(类型为Variant)。由于Delphi对OpenArray类型参数的支持,使你可以用一行语句生成一个数组。不过它有两个缺陷:只能生成一维数组;只能生成元素类型是Variant的数组。使用Variant数组, 与使用标准Delphi数组类似;例如: MyArray := VarArrayOf(李维, 30, 60, 60.369, China); 2、 VarArrayCreate函数:function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant; Bounds: 告诉数组的上下界; VarType: 决定了数组的中存储什么类型的数据。其它的数组(如二维、或者其他类型等)只能用VarArrayCreate去创建,并用循环给元素赋值。例如:创建数组的数组, 可以模仿任何类型的数据结构类型: VarArrayX := VarArrayCreate(1,10, varVariant); 数组的单个元素可以装载一个数组: VarArrayX1 := VarArrayCreate(1,5, varVariant); 3、VarArrayHighBound、VarArrayLowBound函数:返回变体数组上/下限,从1开始(1:列;2:行;3:3维的最后一维)。function VarArrayHighBound(const A: Variant; Dim: Integer): Integer;4、VarArrayRedim函数:修改variant数组的最高限。procedure VarArrayRedim(A: Variant; HighBound: Integer);5、VarArrayDimCount函数:返回variant数组维数unction VarArrayDimCount(const A: Variant): Integer;6、VarArrayLock、VarArrayUnLock函数:避免运行时刻检查。一般用于初始化一个大数组。function VarArrayLock(const A: Variant): Pointer;procedure VarArrayUnlock(var A: Variant); 在对Variant数组的每一个元素进行赋值时,都要通过运行时逻辑来检查并判断数据类型的兼容性、每个元素的位置等等。为了避免运行时检查,要用VarArrayLock()函数和VarArrayUnlock()过程。VarArrayLock()函数在内存中锁定数组,使数组不再移动和改变大小,并能返回一个指向数组数据的指针。而VarArrayUnlock()过程用来对VarArrayLock()函数锁定的数组进行解锁,使数组能重新移动或改变大小。在锁定数组后,能用更有效的方法对数组进行初始化。7、VarArrayRef函数:获得variant指向的数据function VarArrayRef(const A: Variant): Variant;8、VarIsArray函数:是一个简单的布尔检查函数,判断是否是一个 Variant数组,是则返回Truefunction VarIsArray(const A: Variant): Boolean; overload;function VarIsArray(const A: Variant; AResolveByRef: Boolean): Boolean; overload;9、其他函数1>、VarClear()过程清除Variant变量并将VType域的值设为varEmpty. 2>、VarCopy()将Source复制到Dest。 3>、VarCast()将一个Variant转换成指定的类型并存储在另一个Variant变量中。 4>、VarType()返回指定Variant的varXXX类型代码。 5>、VarAsType()跟VarCast()的功能一样。 6>、VarIsEmpty()如果一个Variant变量的类型代码是varEmpty则返回True。 7>、VarIsNull()判断Variant变量是否包含null值。 8>、VarToStr()将一个Variant变量转换成字符串表达式(如果Variant为varEmpty或varNUll则为空字符串)。 9>、VarFromDateTime()返回一个Variant变量,它存放着指定的TDateTime类型的值。 10>、VarToDateTime()返回在Variant中的TDateTime类型的值。二、一个简单实例代码:var a, b: Variant; I, J, K, M: Integer;begin /a是个一维Variant数组,元素类型是Variant,元素个数是3,上界是2,下界是0。 a := VarArrayOf(1234, abc , Null); /b是一个16行4列的二维数组 b := VarArrayCreate0, 3, 1, 16, varOleStr);I := VarArrayHighBound(b, 1); / I是b的最大列号:3; J := VarArrayLowBound(b, 1); / J是b的最小列号:0; K := VarArrayHighBound(b, 2); / K是b的最大行号:16; M := VarArrayLowBound(b, 2); / M是b的最小行号:1。end;注意,Variant数组下标是列在前,行在后,元素类型是PWideChar,最大列号是3,最小列号是0,最大行号是16,最小行号是1。三、变体类型和流的相互转换/1、 变体类型转成流procedure VariantToStream(const Data: OleVariant; Stream: TStream);var p: Pointer;begin p := VarArrayLock(Data); / 加锁,并返回一个指针指向的数据。 避免运行时时刻检查 try Stream.Write(p, VarArrayHighBound(Data,1) + 1); / 返回最大的列号 finally VarArrayUnlock(Data); / 解锁,使数组能重新移动或改变大小。 end;end; / 2、流转成变体类型function StreamToVariant(Stream: TStream): OleVariant;var p: Pointer;begin Result := VarArrayCreate(0, Stream.Siz
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境突发应急预案网址(3篇)
- 农村清明安全应急预案(3篇)
- 2026年中国邮政集团有限公司山东省分公司人员招聘考试备考试题及答案
- 2026年多孔硝铵行业洞察报告及未来五至十年发展趋势报告
- 2026年共享医疗行业洞察报告及未来五至十年发展趋势报告
- 番茄种子销售活动策划方案(3篇)
- 社区应急预案修订情况(3篇)
- 穿孔板屏障施工方案(3篇)
- 组织优化主题活动方案策划(3篇)
- 羊肠子营销方案策划(3篇)
- T/CNNDAS 002-2026芬太尼类药品单支识别码技术规范
- 2026山西教师职称考试(教育管理)历年参考题库含答案详解
- 2026年高校教师资格证(高等教育学)考试题库(带答案)
- 2026年四川省拟任县处级领导干部任职资格试题及参考答案
- 《演唱 山谷回声真好听》课件2026-2027学年西师大版一年级上册音乐
- 教师职业心理赋能 焕发育人全新活力课件
- 2026-2027学年川教版(新教材)小学信息科技六年级上册(全册)教学设计(附目录p73)
- 2026年中国银行考试题目及答案
- 一例丘脑出血合并肺部感染雾化吸入治疗个案护理
- 教科版三年级上册科学第二单元《水》单元测试卷含答案A4打印版
- 2027年中国电信集团有限公司校园招聘考试参考试题及答案详解
评论
0/150
提交评论