Delphi 中的 Var buffer 开类型参数
以下是在网上收集的一些对无类型参数的说明.个人理解无类型变量就是一个指针.
象Delphi中function Read(var Buffer; Count: Longint): Longint; override;象Buffer这样没有类型的参数究竟应该怎么给参数????
这说明Buffer是通过地址方式传递的,一般说来只要是一段内存区域就行。
var Buffer; const buffer;
这些没类型说明的形参说明是取地址的首地址。
类型 首地址
string string[1]
char 自己
integer 自己
record 自己
array arr[0]
pchar pchar()^
pointer pointer()^
otherPointer otherPointer()^ PInteger()^之类的
一般用首地址的方法或函数除了首地址外,都有一人count的参数,一般我们用
length(string), sizeof(record), sizeof(type) * lengh
如果你在写reocord中有string,请为它分配内存: string[len], or str: array[0..len] of char
Buffer1:Array of char;
Buffer2:Array [0..2048] of char;
Buffer1 和 Buffer2 在使用上是没有区别的,如:
Buffer1[10] 和 Buffer2[10]等价----char 类型
Buffer1 和 Buffer2等价 ----------pointer 类型
所以:
Var Buffer:Array of char;
...
FileStream.Read(Pointer(Buffer),FILEStream.Size);
....
应该改为:
FileStream.Read(Buffer,FILEStream.Size);
同理
Var Buffer:String;
...
FileStream.Read(Pointer(Buffer),FILEStream.Size);
...
应该改为:
FileStream.Read(Buffer,FILEStream.Size);
var表示变参,即在函数中可以改变其值并且返回到调用过程中
var buf就是不指定类型的变参,不管你传入什么类型,函数中一律将其作为字节来对待,
比如传入DWORD,就是4个字节,函数中不知道是DWORD,所以必须用bufsize告诉它是4个字节
这样明白?
相当于让你优雅的传递一个数据指针,基本上接受这类参数的行为大部分就是内存处理,无需理会或在意传进来的数据格式,或者参数的格式预先就知道,只是为了方便。
Delphi 中的 Var buffer 开类型参数相关推荐
- delphi中的单元
Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同.一个Delphi程序由多个称为单元的源代码模块组成.使用单元可以把一个大型程序分成多个逻辑相关 ...
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
- delphi 中几种多线程操作方式
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 主线程又程为UI线程. 进程和线程的主要差别在于它们是不同的操作系统资源管理方式.进程有独立的地址空 ...
- Delphi中record的使用
在Delphi中的Record类型中,与之C语言对应的即是结构体类型(struct),也可能是为了符合C语言或C++程序员的习惯,对于它在Delphi中的应用存在的一些问题进行初步的说明.在Delph ...
- DELPHI中鼠标的各种操作
{鼠标:右击,左击,单击,双击,滚轮,拖曳} Delphi程序设计中的鼠标控制 在Windows环境下,鼠标和键盘是主要的输入设备. 在Delphi中几乎每个对象都具有反映鼠标控制的事件, 这些事件的 ...
- Delphi中SendMessage使用说明
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...
- DELPHI 中 Window 消息大全使用详解
Window 消息大全使用详解 导读: Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能 ...
- Delphi中的容器类(二)
TStrings类 出于效率的考虑,Delphi并没有象C++和Java那样将字符串定义为类,因此TList本身不能直接存储字符串,而字符串列表又是使用非常广泛的,为此Borland提供了TStrin ...
- Delphi中的线程类
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
最新文章
- ASP.NET MVC 过滤器(一)
- 人工智能的核心是“算法”,医生才是主角!
- Java开发主流框架是什么?
- SGI STL 学习笔记二 vector
- typedef的一些用途
- python建模与仿真控制系统_系统建模与仿真
- flash电脑安装包_flash控件下载特色众多flash控件下载使用评估
- 单片机和嵌入式系统的区别
- Github文件夹下载到本地
- 云计算供应商在合同谈判时可能拒绝的三个事项以及要求
- 理解计算机3D图形学中的坐标系变换
- react讲解(函数式组件,react hook)
- MIS WiFi安全相关-aircrack-ng破解WiFi密码
- http协议入门之Content-Disposition
- 初学者都能看懂的MYSQL索引基础
- 图像拼接(十一):双摄像头实时拼接+stitching_detailed
- CFD解决一维标量问题(迎风、Lax-Wendroff、TVD、WENO5+3阶Runge-Kutta)
- 白嫖freenom免费顶级域名
- 【2019-数据结构-课程设计】完成
- 2009年国庆节+中秋节 放假啦
热门文章
- 2013年全国首届CISA认证培训强化班成功举办
- 内存泄露检测工具之DMalloc
- linux系统时区设置
- web developer tips (74):在 Visual Studio 2008设计器里添加或移除AJAX Extenders
- c#Struts框架理念和自制Struts框架下 复杂版
- 一级建造师考试通过了 !
- clcikhouse Code: 1000. DB::Exception: File not found
- Linux cut用法
- hdu 4362(单调队列优化dp)
- hdu 2047(递推)