Delphi下使用指针的简单总结

【Delphi 基础知识 16】指针和指针类型 Delphi 是一种基于 Object Pascal 编程语言的集成开发环境(IDE),它支持面向对象编程和指针的使用。在 Delphi 中,指针是一种强大的工具,用于直接操作内存地址,但同时也需要小心使用以避免出现内存泄漏和访问非法内存的问题。 阅读详情
 Delphi下使用指针的简单总结 2007-05-27 16:21:08
标签: Delphi 指针
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://fxh7622.blog.51cto.com/63841/28207
由于最近公司太忙,好久没有更新我的BLOG了。原来想着写写关于HOOK驱动的文章,可是最后想想好久已经没有做驱动的东西了,怕写出来有错误,于是作罢。开发游戏也有一段时间了,发现使用DELPHI来开发网络游戏不了解DELPHI下指针的使用是完全不行的。所以今天我简单总结以下我使用DELPHI指针的心得。希望对大家有所帮助。
记得在大学学习C语言的时候在谭浩强编写的书中,关于指针一章的开始就说“指针是C语言的精华”,可见指针对于C语言的重要性。其实在Pascal语言中指针也占据着重要的位置。
 
1:指针的赋值。
type
RTestInfo = record
Age:Integer;
end;
PtestInfo = ^ RtestInfo;
var
Test1,Test2:PtestInfo;
Begin
     New(Test1);
     New(Test2);
     Test1^.Age:=12;
     Test2:=Test1;
     Application.MessageBox(Pchar(IntToStr(Test2^.Age)),’测试’,MB_OK);
     Test1^.Age:=13;
Application.MessageBox(Pchar(IntToStr(Test2^.Age)),’测试’,MB_OK);
DisPose(Test1);
DisPose(Test2);
End;
上面的代码中使用了Test2:=Test1;进行指针的赋值,也就是说进行赋值以后两个变量指向的相同的地址,所以当Test1的Age发送变化以后Test2的Age也随之发生了变化。反过来也是一样。那如果我们要将Test1中的内容放在Test2中并且当Test1中的内容发生变化的时候Test2的内容不会发生变化有如何来做呢?其实很简单,使用Test2^:=Test1^;就可以了,这个时候变量Test1和变量Test2指向的是两个不同的地址,当一方的内容发生变化的时候另外一方不会受到影响。
 
2 :数组和指针的转换。
曾使用过API函数来编写网络通信的都知道,网络传输过程中传输的都是char类型的数组。而我们经常需要将自己定义的一个结构通过网络传输出去,并且当对方接收到这个数据以后又能将其转换为相应的结构来处理。以前我是使用添加标记位来解决这个问题。其实使用数组和指针转换是很简单的。
type
         RtestInfo = record
                   Age :Integer;
         End;
Var
         Test: RtestInfo;
         Data :array[0..1024] of Char;
Begin
         Test.Age:=13;
         Fillchar(Data,SizeOf(Data),#0);
         StrMove(Data,@ Test,sizeof(Test));
         // 数据发送
End;
在上面的例子中首先我们将我们定义数组Data清空,然后使用函数StrMove将结构Test的内容复制到Data中去。这个时候就可以将数据发送出去。当对方接受到数据以后,可以用以下的代码进行还原。
type
         RtestInfo = record
                   Age :Integer;
         End;
Var
         Test: RtestInfo;
Begin
         StrMove(@Test,Data,sizeof(Test));
         // 处理数据
End;
这个时候就可以对发送过来的数据进行相应的处理了。
 
3 :函数指针的使用。
在分模块开发的过程中,DLL占据着重要的位置。在我开发游戏的服务端也是使用DLL的方式。在开发的时候遇见这样的一个问题,例如我在一个EXE中编写了一个功能非常复杂的函数,在DLL中我想使用到它,如何做呢?其实使用函数的指针就可以很方便的实现。
我们知道DLL的运行空间是和调用它的EXE在一起的。也就是说在这个空间中的资源理论上DLL是都可以使用。所以只要将exe中的函数指针传给DLL,那么DLL就可以使用这个函数了。
例如在DLL中有函数ModuleSendData作用是让EXE中传入函数的指针链表,这个链表中的函数都是DLL中可能用到的。
 
SendDataFun: procedure(Casetype: Byte; UserSocket: RUserSocket; Data: array of char; DataLen: Integer);
 
function ModuleSendData(FunPList: TList): Boolean; stdcall; export;
begin
  SendDataFun := FunPList.Items[0];
end;
 
在EXE中的代码是:
Linstance:=LoadLibrary(Pchar(Temp));
     if Linstance>0 then
     begin
        // 将发送数据的指针传入DLL插件中
        @GiveModuleFun:=GetProcAddress(Linstance,'ModuleSendData');
        if @GiveModuleFun<>NIl then
        begin
          m_FunList:=TList.Create;
            // 发送数据
            t_Pointer:=@DllSendData;
            m_FunList.Add(t_Pointer);
                  GiveModuleFun(m_FunList);
                   End;
         End;
其中DllSendData就是我们想传入给DLL的函数。
 
这个时候在DLL中使用SendDataFun就和一般的函数一样了。
这里注意的一点是Exe中的函数DllSendData我定义的是一个全局函数。原因是这样取得函数的指针的时候比较简单(关于类里面的函数指针如何取得我不了解,希望有了解的朋友不吝赐教,感激不尽)。
 
 

本文出自 “狗窝” 博客,请务必保留此出处http://fxh7622.blog.51cto.com/63841/28207

PTC-6-2004汽轮机性能计算源代码,pycharm-包括试验计算、一类修正、二类修正-以CC350-16.7/0.98/0.5/538/538型汽轮机为例,5万7千字,过程不易欢迎打赏 汽轮机性能计算完整源代码-简化试验-包括试验计算一类修正计算和二类修正计算目录图 1 工程结构。 阅读详情

相关推荐

FastH3 + vLLM-Omni:MiniMax H3 视频生成本地部署与加速实战

随着多模态大模型在视频生成领域的普及,如何高效部署和加速推理成为工程实践的关键。vLLM作为高性能推理框架,通过PagedAttention和continuous batching显著优化了大模型吞吐;而FastH3则针对特定模型结构进行算子融合和CUDA优化。结合vLLM-Omni对多模态输入的支持,可以将MiniMax H3的视频生成耗时从分钟级压缩至秒级。本文以视频生成模型为例,详细拆解环境配置、推理优化与问题排查,为多模态模型本地部署提供参考。

ciya3282的博客 482

Delphi New,Getmem,ReallocMem联系与区别

转自博客园http://www.cnblogs.com/jsrgren/archive/2011/10/31/2270353.html procedure New(var P: Pointer);  {为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空间大小} procedure GetMem(var P: Pointer; Size: Integer); {分配一个指定大小的内

找个地方放一下 4648

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析,RDA的实现路径也有很多,今天介绍一下CANOCO软件的实现方法。1.不同样点和环境因子之间夹角是锐角 是正相关,是钝角是负相关。2.夹角越大 说明相关性较小,夹角越小,相关性越大。得有不同的物种或者样点数值,再加上环境因子数据。3.箭头越长 相关性越大。时间调整到2010年。

Along6的博客 1万+

Delphi的指针为什么可以多次New,始于队列TQueue对指针的Push和Pop的思考

下面的思考是关于Delphi的指针、内存的,其实C、C++的指针、内存大概也是这样的原理,不过可能正在具体的语法……方面有所不同,要结合在一起理解、也要区分开别弄混了! 多次New,然后存入队列 今天在使用Delphi的队列的时候,需要在每次将一个record压入队列的时候对该record进行New操作(分配内存空间),然后将该指针压入到...

weixin_34310127的博客 538

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4864

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

delphi指针简单入门

摘自:http://topic.youkuaiyun.com/t/20030614/03/1914197.html   delphi指针简单入门: 看一个指针用法的例子: 1         var 2             X,   Y:   Integer;       //   X   and   Y   整数类型 3             P:   ^Integer;           //...

注重长远 天天积累 cqujsjcyj 232

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2231

Delphi指针相关学习

Delphi指针相关

qq_43404969的博客 766

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

【Word提效 No.010】使用AI一键复制格式刷应用格式

本文介绍利用AI工具WorkBuddy实现Word文档格式批量复制的自动化解决方案。通过简单指令即可将指定段落的格式一键应用到多个目标段落,解决传统格式刷操作繁琐、易出错的问题。方案包含三步操作:准备文档、输入指令模板、验收效果,并提供多种场景的现成指令示例。该工具支持字体、段落等格式属性的批量复制,且不会覆盖原文件,适用于论文、手册等文档的格式统一需求。

u011186532的专栏 77

Delphi指针简单入门

delphi指针简单入门:         看一个指针用法的例子:     1         var     2             X,   Y:   Integer;       //   X   and   Y   整数类型     3             P:   ^Integer;           //   P   指向整数类型的指针     4         begin

lee576的专栏 1197

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于DELPHI中的类对象以及类指针简单探讨总结。

      最近用DELPHI写程序,发现了DELPHI类对象引用时,有个需要特别注意的地方,故总结如下,与大家分享。有讲的不对的地方,还请不吝斧正。              首先:我们定义一个类,DELPHI定义类默认都是从TObject继承。 TX = class public    m_buf: string; end; 然后我们在定义TX的两个实例:m

wbcp2000的专栏 3571

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

delphi指针简单入门:

     指针用法的例子:     1         var     2             X,   Y:   Integer;       //   X   and   Y   整数类型     3             P:   ^Integer;           //   P   指向整数类型的指针     4         begin     5            

haiou327’blog 624

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 剖析Delphi中的多态
下一篇: delphi 指针 入门
二马化拾
博客等级 码龄21年 11粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值