文档章节

delphi variant和stream相互转换的函数

s
 shs0708
发布于 2016/08/04 19:08
字数 314
阅读 26
收藏 0

网上广为流传的两个函数,确实好用。记录一下

procedure VariantToStream (const v : OleVariant; Stream : TMemoryStream); 
var 
  p : pointer; 
begin 
  Stream.Position := 0; 
  Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1;  //其实可以直接取下维作为流大小,因为一般情况下变体数组上维为0的
  p := VarArrayLock (v);   //我写程序时,就是到此卡住了,因为变体数组是一种安全数组,它是有描述数据的数组,v[0]才是它的真实起始地址,但就是很难得到它的地址,而这个函数刚好处理了这个问题!
  Stream.Write (p^, Stream.Size);  //此句让我这个初学者惊叹,也不是没有这样用过,只是没有在数组中这样结合用过,呵呵,学习学习!
  VarArrayUnlock (v);   //再使用了VarArratLock()函数以后,一定要用此函,不然会报错的!
  Stream.Position := 0; 
end;
procedure StreamToVariant (Stream : TMemoryStream; var v : OleVariant); 
var 
  p : pointer; 
begin 
  v := VarArrayCreate ([0, Stream.Size - 1], varByte);   //也学习一下这个函数,它是用来建立一个变体数组
  p := VarArrayLock (v);   //其它就没有什么了,基本跟上面的是相反的!
  Stream.Position := 0; 
  Stream.Read (p^, Stream.Size);   //其实这两个过程的妙处就在此了,指针的应用,棒极了
  VarArrayUnlock (v); 
end;

本文转载自:http://www.cnblogs.com/railgunman/articles/1789897.html

共有 人打赏支持
s
粉丝 0
博文 10
码字总数 6185
作品 0
广州
私信 提问
Delphi--Stream和Variant的转化

Delphi--Stream和Variant的转化 网上广为流传的两个函数,确实好用。记录一下procedure VariantToStream (const v : OleVariant; Stream : TMemoryStream);varp : pointer;beginStream.Posit......

vga
2016/06/09
37
1
FastScript脚本使用白皮书(Ver1.0)

〖转载〗FastScript脚本使用白皮书(Ver1.0) 1. 可以使用的对象如下: 1.1. 原始类: Tobject, TPersistent ,TList, TStrings, TStringList, TStream, TFileStream, TMemoryStream, TCompon......

vga
2015/01/13
0
0
delphi pchar char byte string转换问题

delphi pchar char byte string转换问题 注:Delphi中的Char,PChar,PByte,Byte,String的相互转换,您是不是也遇到过,为此头疼过吗?你要是明白了他们的原理就会轻松了。 话题064840的标题是...

鹅倌
2017/01/06
0
0
在C#中int,string等各种类型之间的相互转换--现在写点技术文档

简单方法:int转String:ToString();int转string:int.Parse() 复杂方法:int转String:System.Convert.ToString();int转string:System.Convert.ToIntXX() 2. int32.parse(xxxxxx); xx.t......

C_Sharp大大
2013/06/12
0
2
如何把程序钉到Windows7任务栏

在CSDN论坛看到有网友提问如何把程序钉到Windows7的任务栏,ccrun(妖哥)对这个问题很感兴趣,于是google了一下,没有找到相关的API资料,但是在国外的一个站点看到用FolderItemVerb对象来实现...

任远
2011/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程

并发与并行 并发指的是同时应对多个事件的能力,并行指的是同时做多件事的能力。 位级并行:32位计算机能够同时处理32位数运算,而8位计算机却要进行多次运算。 指令级并行:表面上看cpu是串...

春哥大魔王的博客
20分钟前
0
0
js数组遍历和对象遍历

数组遍历 for for(var i=0,len=arr.length;i<len;i++){console.log(arr[i]);} forEach - ES5语法,性能比for弱,不能使用break终止循环,不能使用return arr.forEach(function(item,inde......

祖达
39分钟前
2
0
Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。

今天同事遇到一个Spring启动加载配置文件时,不识别reg:zookeeper标签的问题。 我查看配置,发现是Spring配置文件的头部没有引入reg标签的命名空间,具体如下图: 所以,以后遇到类似的标签未...

花漾年华
今天
2
0
阿里云领衔云市场

近期,2018年Q4及全年的全球云基础设施服务市场数据新鲜出炉,发布方是美国市场研究机构Synergy Research Group。这个机构是专做电信网络市场情报的公司,成立于1999年,每年都会公布各大公有...

linuxCool
今天
2
0
C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部