delphi Variant 与 流(TStream)相互转换

Variant 与 流(TStream)相互转换

代码

Variant转TStream

procedure VariantToStream(Stream: TStream; const Value: Variant);
varp: Pointer;
beginif VarIsNull(Value) or VarIsEmpty(Value) thenExit;Stream.Size := VarArrayHighBound(Value, 1) - VarArrayLowBound(Value, 1) + 1;p := VarArrayLock(Value);tryStream.position := 0;Stream.Write(p^, Stream.Size);Stream.position := 0;finallyVarArrayUnlock(Value);end;
end; 

TStream转Variant

function StreamToVariant(Stream: TStream): Variant;
varp: Pointer;
beginif Stream.Size = 0 thenExit(Null);Result := VarArrayCreate([0, Stream.Size - 1], varByte);p := VarArrayLock(Result);tryStream.position := 0;Stream.Read(p^, Stream.Size)finallyVarArrayUnlock(Result);end;
end;

方法

System.Variants.VarArrayLock

function VarArrayLock(const A: Variant): Pointer;

锁定变体数组并返回指向数据的指针。

锁定时,无法调整变体数组的大小,任何对VarArrayRedim的调用都会失败。锁定后,变体数组必须在以后使用VarArrayUnlock来解锁。如果 A 给出的变体不是数组,则会引发 EVariantInvalidArgError 异常。

一旦验证变体数组具有正确的边界和维度,就可以使用 VarArrayLock 来直接访问数组数据,从而提高性能。

System.Variants.VarArrayUnlock

procedure VarArrayUnlock(const A: Variant);

解锁之前被 VarArrayLock 锁定的变体数组。如果 A 给出的变体不是数组,则会引发 EVariantInvalidArgError 异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue3页面展示代码】展示代码codemirror插件

技术版本: vue 3.2.40、codemirror 6.0.1、less 4.1.3、vue-codemirror 6.1.1、 codemirror/lang-vue 0.1.2、codemirror/theme-one-dark 6.1.2 效果图: 1.安装插件 yarn add codemirror vue-codemirror codemirror/lang-vue codemirror/theme-one-dar…

神经网络 03(参数初始化)

一、参数初始化 对于某一个神经元来说,需要初始化的参数有两类:一类是权重W,还有一类是偏置b,偏置b初始化为0即可。而权重W的初始化比较重要,我们着重来介绍常见的初始化方式。 (1)随机初始化 …

Prometheus、node_exporter、Grafana端口修改(端口占用)

服务器监控搭建完成后涉及默认端口修改,如下 node_exporter 端口修改 #修改启动服务 vi /usr/lib/systemd/system/node-exporter.service #增加 --web.listen-address:8002 [Unit] ​ DescriptionThis is prometheus node exporter ​ Afternode_exporter.service…

《PostgreSQL与NoSQL:合作与竞争的关系》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

山西电力市场日前价格预测【2023-09-21】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-21)山西电力市场全天平均日前电价为345.38元/MWh。其中,最高日前电价为408.38元/MWh,预计出现在19: 00。最低日前电价为246.41元/MWh,预计…

ew三层代理使用方法

1.获得目标网络内两台主机 A、B 的权限,情况描述如下: A 主机: 目标网络的边界主机,无公网 IP,无法访问特定资源。 B 主机: 目标网络内部主机,可访问特定资源,却无…

查看docker镜像是由哪些指令创建来的

–no-trunc 是不要省略。 docker history --no-trunc kevinchina/deeplearning:sd_base_cuda116clip7 > history.txtcp -aL ~/.cache/huggingface/hub/models–Salesforce–blip-image-captioning-large/snapshots/e33defe055114d86bec9c0705b71e590cfc0694c/* ~/.cache/hu…

k8s手动下载镜像、通过容器创建镜像方法

手动下载镜像 1、首先pull镜像到本地 docker pull <镜像名称>:<标签>2、转储镜像 docker save -o /path/to/save/image.tar 3、解压 tar -xvf /path/to/save/image.tar补充 1、如果要将tar还原成镜像 docker load -i /path/to/save/image.tar或者用输入重定向…

lazada跨境电商商品数据采集

Lazada跨境电商商品数据采集可以使用以下两种方法&#xff1a; 手动采集&#xff1a;可以在Lazada网站上手动搜索商品信息&#xff0c;然后复制粘贴到Excel表格中。这种方法比较麻烦&#xff0c;需要逐个搜索和记录商品信息&#xff0c;适合采集数量较少的商品数据。使用采集软…

python异常处理 try,except,finally

1、基本语法 在python中&#xff0c;一般处理和捕获异常会用到这个结构&#xff1a; try:python程序 except 错误类型1:python程序 except 错误类型2:python程序 except 其他错误类型:python程序 finally:python程序首先一定会进入try中执行try的python程序如果报错 则进入exc…

技术对比:Flutter vs. 传统桌面应用开发框架

在移动应用开发领域&#xff0c;Flutter已经赢得了广泛的认可和采用&#xff0c;成为了跨平台移动应用开发的瑞士军刀。然而&#xff0c;Flutter的魅力并不仅限于移动平台&#xff0c;它还可以用于开发桌面应用程序&#xff0c;为开发人员提供了一种全新的选择。本文将深入探讨…

Elasticsearch(四)深分页Scroll

一、前言 1.1、scroll与fromsize区别 ES对于fromsize的个数是有限制的&#xff0c;二者之和不能超过1w。当所请求的数据总量大于1w时&#xff0c;可用scroll来代替fromsize。 fromsize在ES查询数据的方式步骤如下&#xff1a; 1、先将用户指定的关键字进行分词&#xff1b;…

springboot+jxls复杂excel模板导出

JXLS 是基于 Jakarta POI API 的 Excel 报表生成工具&#xff0c;可以生成精美的 Excel 格式报表。它采用标签的方式&#xff0c;类似 JSP 标签&#xff0c;写一个 Excel 模板&#xff0c;然后生成报表&#xff0c;非常灵活&#xff0c;简单&#xff01; Java 有一些用于创建 …

javascript获取样式表的规则及读取与写入

CSSStyleSheet是继承了StyleSheet的接口属性,它是用于找当前文档中的<link rel“” href“”…>这样文件的&#xff0c;有以下属性&#xff1a;lenght,cssRules,title,href,type,deleteRule,insertRule等 CSSStyleRule是继承于CSSRule&#xff0c;它是用于找<link re…

5G定位技术原理与应用场景

5G高精度定位服务不仅适用于应急&#xff0c;还可以支持大量的个人业务&#xff0c;包括室外和室内场景&#xff0c;可以在交通道路、隧道、地下停车场或室内环境中支持高精度定位服务。在这些区域中&#xff0c;由于卫星信号的覆盖范围较小&#xff0c;基于5G网络的高精度定位…

[NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤

一 数据集 【Awesome-Chinese-LLM中文数据集】 【awesome-instruction-dataset】【awesome-instruction-datasets】【LLaMA-Efficient-Tuning-数据集】Wiki中文百科&#xff08;25w词条&#xff09;wikipedia-cn-20230720-filteredBaiduBaiKe&#xff08;563w词条&#xff09; …

权限提升Web篇

权限总类 Linux 管理员UID为0:超级用户&#xff0c;即root用户&#xff0c;相当于system和administrator的集合 系统用户UID为1-999: Linux系统为了避免因某个服务程序漏洞而被黑客提权的普通用户&#xff0c;拥有部分权限 UID从1000开始: 是由管理员创建的用于日常工作的用…

java-- 字符串+拼接详解, 性能调优 (底层原理实现)

目录 简单了解一下字符串 String类里面是如何存放字符串的? String的不可变性 字符串拼接的方法 1.使用拼接字符串 2. 使用concat 3. 使用StringBuilder 4.StringBuffer 使用字符串拼接的原理 使用concat StringBuilder 效率比较 简单了解一下字符串 字符串在java…

Killing LeetCode [46] 全排列

Description 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 Intro Ref Link&#xff1a;https://leetcode.cn/problems/permutations/ Difficulty&#xff1a;Medium Tag&#xff1a;Array&#xff0c;Back Trackin…

win10 win11 停止系统自动更新方法

目录 方法一&#xff1a;使用注册表更改 1. 进入注册表 2. 进入如下目录 3. 新建 DWOED(32-位)值 4. 双击 FlightSettingsMaxPauseDays&#xff0c;选择十进制&#xff0c;左侧输入9999 5. 开头的天数已经变为9999天 方法二&#xff1a;停止自动更新的服务 1. 查询服务…