delphi的interface编程注意问题

LFM调制信号分类与检测识别 支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗干扰(DDJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)。Faster-RCNN支持检测识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)等8种信号。 阅读详情

1.不支持继承
2.不能从接口获得实现类,如:
ITest = interface
...
end;

TTest = class(TObject, ITest)
...
end;

...
var
  tmpITest: ITest;
  tmpTTest: TTest;
  tmpTTest2: TTest;
...
  tmpITest := tmpTTest;//正确
...
  TTest(tmpITest).xxx();//不正确,运行期非法地址访问错误。
  tmpTTest2 := tmpITest;
   tmpTTest2.xxx();不正确,运行期非法地址访问错误。



3.接口设置为nil的情况
tmpI: ITest;
...
tmpI := nil;
//这个时候,delphi会调用function _IntfClear(var Dest: IInterface): Pointer;
//该函数内部调用了_Release
//所以delphi编程的com对象释放就是设置为nil就好(directX,com,com+等)
如果不想delphi默认调用函数_IntfClear可以怎么做
Pointer(tmpI) := nil;
强制转化为指针操作



4.对于类引用了接口的情况,delphi是先释放自己,在释放引用的接口的实现对象.
ITest = interface
...
end;

TTest = class(TObject, ITest)
...
  second: ITest;
  procedure SetSecondITest(aITest: ITest);
end;

procedure TTest.SetSecondITest(aITest: ITest);
begin
  second := aITest;
end;

procedure Test();
var
t1, t2: TTest;
i1, i1: ITest;
begin
t1 := TTest.Create();
i1 := t1;
t2 := TTest.Create();
i2 := t2;
t1.SetSecondITest(i2);
t2.SetSecondITest(i1);
end;
结果是delphi异常错误
t1释放的时候,先自己释放后,接着把i2的对象t2释放掉了,所以t2的释放就不对了。
注释掉"t1.SetSecondITest(i2);"会发现t2先释放,然后t1释放
注释掉"t2.SetSecondITest(ii);"会发现t1先释放,然后t2释放
(可以通过在destructor函数打印消息获得谁在释放)


5.
  结合3和4会发现,如果做一个接口的实现类的接口列表会有隐藏问题
  操作列表的时候,如果释放了列表保存的指针(:=nil)/释放列表的时候会释放对应的对象
  这个是不允许的!!!释放列表的时候最好做Pointer(tmpI) := nil;这样的操作
  才不容易引起一些莫名其妙的异常错误

OpenClaw 超级 AI 实战专栏【实战案例】(五)邮件收发 + 日历日程 + 文件管理一站式搞定 OpenClaw 实现办公自动化核心是模块解耦:邮件收发、文件管理、日历日程各自封装,便于维护和扩展;开发中需重点解决编码兼容、权限配置、时间格式、重复处理四大类坑点,核心思路是 “提前校验 + 异常兜底 + 统一格式”;敏感信息(邮箱密码、API Token)务必通过.env管理,避免硬编码泄露。 阅读详情

相关推荐

VCSA 6.7证书过期别慌!手把手教你通过SSH修改系统时间恢复登录(附STS证书修复脚本)

本文详细介绍了VCSA 6.7证书过期的应急处理方案,包括通过SSH修改系统时间临时恢复登录、全面更新证书体系以及专项修复STS证书的实战步骤。文章还提供了后期验证和系统加固的建议,帮助运维人员有效应对证书过期问题,确保虚拟化平台的稳定运行。

weixin_31292729的博客 416

Delphi下的COM编程

 Delphi下的COM编程作者:岑心 03/9(转载需征得作者同意)Delphi通过向导可以非常迅速和方便的直接建立实现COM对象的代码,但是整个COM实现的过程被完全的封装,甚至没有VCL那么结构清晰可见。一个没有C++下COM开发经验甚至没有接触过COM开发的Delphi程序员,也能够很容易的按照教程设计一个接口,但是,恐怕深入一想,连生成的代码代表何种意义,哪些能够定制都不清楚。前几期 “

蓝色的雨 2041

联想服务器ThinkSystemRAID阵列设置教程

关注我不迷路,全是干货! 以联想ThinkSystemSR530为例子进行示范。 开机点按【F1】 点击——【UEFI设置】 依次点击——【系统设置】——【存储】 点击——【RAID卡】 PS:本次服务器配置的是730-8i 阵列卡,按实际情况选中需要设置的阵列卡即可。 点击——【Main Menu】 点击——【Configuration Management】 点击——【Create Virtual Drive】 点击——【Select RAID Leve..

littlelotusK的博客 2万+

Delphi COM编程介绍(转)

转自http://www.cnblogs.com/abchjb/articles/461725.html 软件重用是业界追求的目标,人们一直希望能够像搭积木一样随意“装配”应用程序,组件对象就充当了积木的角色。所谓组件对象,实际上就是预定义好的、能完成一定功能的服务或接口。问题是,这些组件对象如何与应用程序、如何与其他组件对象共存并相互通信和交互?这就需要制定?个规范,...

378

tft_espi 中文字体及自定义字体制作(tft.eSPI模块)

tft.eSPI库自定义字体方法 先下载 processing 然后安装到mixly安装目录下找到tft_eSPI文件夹。

琢磨侠的博客 2763

抖音自定义卡片链接(图文链接)

抖音自定义可以自定义标题,打开链接,和展示图片 效果 主要代码 public void sendMessage(String conversationId, Object aBaseContent) throws Exception { // C233282u5.LIZIZ.LIZ().LIZIZ(LIZ).LIZ(obtain).LIZ(hLn).LIZ((AbstractC59811HHc) new H9Q()); Object HOa = ReflectionUtil

傅恒的博客 4140

Delphi中使用Interface的好处

1、实现多继承 Delphi中的类是不能多继承的,我们可以通过Interface来间接实现: TComplexClass = class(TParentClass, Itest1, Itest2, Itest3) end;   2、生存期自管理 Delphi中的Int

963

JAVA:Spring Boot3 集成 Spring AI 实现 Skill 开发

本文介绍了如何通过Spring Boot和Spring AI实现大模型技能(Skill)开发,让AI具备调用业务系统能力。文章首先解释了Skill的概念,即AI可调用的业务能力,如查询订单、天气等,并展示了执行流程和整体架构。然后详细介绍了实践样例,包括技术版本、Maven依赖配置、AI服务设置、ChatClient创建和Skill技能注册中心的实现。注册中心提供了技能的注册、查询、启用/禁用等功能,支持按类别管理技能,并能够获取所有可用技能列表。通过这种方式,开发者可以轻松为大模型扩展业务功能调用能力。

木头 623

Delphi 中 interface 如何使用 (chatGPT回答)?

本文详细介绍了Delphi中的Interface实现方式

sensor_WU 博客 727

buildozer

/home/chenyang/new_kivy/.buildozer/android/platform/build/build/other_builds/hostpython3/desktop/hostpython3/Lib

东方佑 16万+

PyTorch深度学习实战(2)——PyTorch基础

PyTorch 是广泛应用于机器学习领域中的强大开源框架,因其易用性和高效性备受青睐。在本节中,将介绍使用 PyTorch 构建神经网络的基础知识。首先了解 PyTorch 的核心数据类型——张量对象。然后,我们将深入研究用于张量对象的各种操作。PyTorch 提供了许多帮助构建神经网络的高级方法及组件,并提供了利用 GPU 更快地训练神经网络的张量对象。

盼小辉丶的博客 5万+

DELPHI 6 抢先研究-- BizSnap/SOAP/WebService 之二

DELPHI 6 抢先研究-- BizSnap/SOAP/WebService 之二 -- 通过 SOAP 传递自定义类型数据     在前一个例子(见 《DELPHI 6 抢先研究 -- BizSnap/SOAP/WebService 之一 -- 一个 Hello world! 的例子》)中我们看到,通过 SOAP 可以很方便地进行远程对象调用,虽然那个例子用的对

猛禽的编程艺术 5178

用 MATLAB 实现鼻子和嘴的检测

为了方便起见,这里我们使用了 CascadeObjectDetector 中自带的 haarcascade_frontalface_alt2.xml 文件,该文件包含了多个包含鼻子和嘴的样本图像。其中 bbox 变量表示检测到的所有鼻子和嘴的边界框信息。在图像处理中,鼻子和嘴的检测是十分重要的一项任务。本文将介绍如何使用 MATLAB 实现鼻子和嘴的检测,并提供相应的源代码。然后,我们可以调用之前创建的 detector 对象来进行鼻子和嘴的检测。综上所述,我们可以使用以上代码实现鼻子和嘴的检测。

qq_39605374的博客 256

Interface 在DELPHI里的用法示例

任务描述: 我们有4个类,分别生成4个对象:A、B、C、D A需要调用B的方法,把数据送给B; 然后,B调用C的方法,把A送来的数据送给C; 然后,C调用D的方法,把B送来的数据送给D; 然后,当D使用完这个数据后,D要调用C的方法将处理结果通知C; C再把处理结果通知B; B再把处理结果通知A; 要求: 写A、B、C、D四个类的时候,要避免对象之间的紧密偶合。按传统做法,大概是让A、B、C、D四...

722

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

用Delphi开发JNI(Java Native Interface)应用

JNI(Java Native Interface,Java本地接口)技术大家都不陌生,它可以帮助解决Java访问底层硬件的局限和执行效率的提高。关于JNI的开发,大多数资料讨论的都是如何用C/C++语言开发JNI,甚至于JDK也提供了一个javah工具来自动生成C语言程序框架。但是,对于广大的Delphi程序员来说,难道就不能用自己喜爱的Delphi与Java互通消息了吗?通过对javah生

我的新blog:<http://nokiaguy.blogjava.net> <http://nokiaguy.cnblogs.com> 1350

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Delphi入门

​var 变量名:数据类型;​不指定常量类型指定常量类型“子界”(Subrange)是 Pascal 语言中的一个概念,它允许程序员定义一个变量的取值范围,以确保该变量只接受特定范围内的值。这在编写安全和高效的代码时非常有用,因为它通过限制值的范围来减少错误的发生。子界类型可以用于整数、字符和枚举类型等。type子界名 = 下界..上界;

qq_24867003的博客 5257

Delphi 2012 XE2 x64平台实现HID设备操作

Delphi 2012 XE2 开始支持x64位平台,现有的32位的DELPHI程序需要移植到x64平台下。下面是这次工作的记录。 直接把32位的工程编译成64位后,没有报错,但是执行SetupDiEnumDeviceInterfaces接口的时候总是返回false,使用GetLastError发现错误码是1784(提供给请求操作的用户缓冲区无效。 ),这个接口的C定义是 SetupD

詹天佐 4494

用Delphi创建服务程序

-----------------------------------作者:陈经韬 来源:CnXHacker.Net -----------------    Windows 2000/XP和2003等支持一种叫做"服务程序"的东西.程序作为服务启动有以下几个好处:    (1)不用登陆进系统即可运行.    (2)具有SYSTEM特权.所以你在进程管理器里

afareg的专栏 1577

用Delphi开发JNI(Java Native Interface)应用(一)

JNI(Java Native Interface,Java本地接口)技术大家都不陌生,它可以帮助解决Java访问底层硬件的局限和执行效率的提高。关于JNI的开发,大多数资料讨论的都是如何用C/C++语言开发JNI,甚至于JDK也提供了一个javah工具来自动生成C语言程序框架。但是,对于广大的Delphi程序员来说,难道就不能用自己喜爱的Delphi与Java互通消息了吗?通过对javah生

SHARE & TOP 2374

Interface与Implementation区别

(1)单元名单元的名称应当有描述性。例如,应用程序的主窗体单元叫MaimFrm.pas。(2)Uses句子Interface部分的Uses子句应当只包含该部分需要的单元。不要包含可能由Delphi自动添加的单元名。Implementation部分的Uses子句应当只包含该部分需要的单元,不要有多余的单元。(3)Interface部分Interface部分应当只包含需要被外部单元访问的类型、变量、过

养猪专业户 1748

用Delphi开发JNI(Java Native Interface)应用(二)

要正确地访问类对象的成员属性(字段)及成员方法,最重要的一点是一定要给出正确的签名,在Java中对于数据类型和方法的签名有如下的约定: 数据类型/方法 签名

SHARE & TOP 2234

Delphi调用C++的对象

在Delphi调用由C++导出的类的对象 调用方式是C++中使用纯虚函数,在Delphi中也就是纯虚类,他们有着相同的布局的虚方法表。每个Delphi的类都有一张VMT表,VMT中包含了一些基础信息、 一些获得运行时信息的方法以及虚方法指针。因为布局相同,所以可以互相调用。 但是C++的类还是C++的类,Delphi类都继承于TObject,而C++没有这个概念。所以,获得了C++的类,不能去尝试...

得也一天,失也一天! 1822

Interface 在DELPHI里的用法示例(转贴)

任务描述:我们有4个类,分别生成4个对象:A、B、C、DA需要调用B的方法,把数据送给B;然后,B调用C的方法,把A送来的数据送给C;然后,C调用D的方法,把B送来的数据送给D;然后,当D使用完这个数据后,D要调用C的方法将处理结果通知C;C再把处理结果通知B;B再把处理结果通知A;要求:写A、B、C、D四个类的时候,要避免对象之间的紧密偶合。按传统做法,大概是让A、B、C、D四个类从同一个实现了

Qi_jianzhou的资料室 1329

Delphi学习记录

本文介绍了Delphi开发环境的基本使用指南。Delphi是一种基于Pascal的面向对象RAD开发工具,常用于嵌入式系统等场景。文章详细讲解了Delphi IDE的各个组成部分:主菜单、工程管理器、代码编辑器、控件区域、对象编辑器等核心功能模块;说明了单元代码的结构,包括interface声明区、implementation实现区以及initialization/finalization初始化模块;最后列举了常用的Delphi关键字,涵盖文件框架、类与对象、控制结构等方面。文章提供了实用操作技巧和常见误区

m0_63758007的博客 246
上一篇: 如何把VSS仓库转换到CVS
下一篇: 西洋古典帆船模型书刊管窥
capboy
博客等级 码龄26年 15粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值