首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi中利用SEH屏蔽退出时的Runtime Error

Delphi写的程序,如果在单元的finalization里出现了一些异常操作会导致退出时抛出Runtime Error ,规范的处理办法当然是解决这些异常,但是有些特殊的情况下,比如用了很多的第三方控件...做法其实很简单,就是在 END.之前手工调用Halt释放,并且将Halt抛出的错误屏蔽掉,这样做和正常的DELPHI释放过程没有任何区别,因为End.编译后其实就是一句话 Call Halt0,只是VCL...中处理,函数检查错误类型是否是DelphiException,如果不是就不处理,这个时候就会被DELPHI的顶层异常机制捕获,并抛出Runtime error,halt里抛出来的错误恰恰就是非DelphiException...,不会对DELPHI正常释放过程产生影响,所有的释放操作都是和VCL一致的,只是不会把错误显示出来。...以下是完整代码: 一、EXE的情况,把代码放在工程文件 procedure Halt0; begin Halt; end; begin Application.Initialize; Application.CreateForm

93040

什么是窗口句柄

什么是窗口句柄 举个例子: 你有你自己的身份证号,一报身份证号,你应该知道是你了 你也有名字,当然名字复杂点,并且不是唯一,没有数字来得方便, 所以,窗口句柄就相当于身份证号,每个窗口都有一个编号,...一个窗口如果里面有组件的话,那么每个组件也会有窗口句柄,这里的窗口提的是WINDOW,不带那个S的,表示的就是一个框,所以说,翻译上的不同,我认为也可以翻译成”框句柄”,这比较符合实情,接下来,就可以对这个句柄进行操作了...如果可以隐藏一个窗口,就发送消息让他隐藏,这里就用到API,当然API是比较多的,所有的功能都是通过API实现的。...更专业一点: 在Windows中,是一个32为无符号整数值,句柄是一个系统内部数据结构的引用,例如,当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142...实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等等,不仅仅局限于窗口函数。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Delphi类型和引用

    事实上Delphi中所有的元件都是从一些共同的祖先类 继承下来的,利用类的可继承性,您可以编写您自己的类元件,并把它加到Delphi的环境中去。...我们可以初步把它理解为一个指向输出该方法的对象实例的指针。举例说明,我们在Delphi的可视环境下 建立一个表单窗口时,它实际上是创建了一个从TForm类中继承下的类类型。...如果仔细看Delphi为您生成 的代码,你可以完全看到上面的各个规则是如何被实现的。同时,当我们在表单上布置各种控件时,也是 在增加这个类类型的特殊成员和方法等。...在消息句柄中,您还可以调用缺省的消息句柄,例如上例中,您声明了一个处理WM_PAINT消息的 方法,事实上Delphi提供了处理这个消息的缺省的句丙,不过句柄的名称可能与您声明的方法名称不一 样,也就是说您未必知道缺省句柄的名称...Automated C++的程序员可能对这个保留字比较陌生,在Automated部分声明的成员类似于在Public部分声明的 成员,它们都是公共的,唯一的区别在于在automated部分声明的方法和特性将生成

    2.5K30

    C++ CreateThread的使用

    "句柄" 类似指针, 但通过指针可读写对象, 通过句柄只是使用对象; 有句柄的对象一般都是系统级别的对象(或叫内核对象); 之所以给我们的是句柄而不是指针, 目的只有一个: "安全"; 貌似通过句柄能做很多事情...实际上不管线程属于哪个进程, 它们在系统的怀抱中是平等的; 在优先级(后面详谈)相同的情况下, 系统会在相同的时间间隔内来运行一下每个线程, 不过这个间隔很小很小, 以至于让我们误以为程序是在不间断地运行...现在我知道的是: 1、线程的 ID 是唯一的; 而句柄可能不只一个, 譬如可以用 GetCurrentThread 获取一个伪句柄、可以用 DuplicateHandle 复制一个句柄等等. 2、ID...ResumeThread 恢复线程的运行; SuspendThread 挂起线程. 这两个函数的参数都是线程句柄, 返回值是执行前的挂起计数. 什么是挂起计数?...这首先这可以让我们知道: 每个线程都有自己独立的堆栈(也拥有自己的消息队列). 什么是堆栈? 其实堆是堆、栈是栈, 有时 "栈" 也被叫做 "堆栈".

    1.2K30

    无代码将死,低代码长存

    使用表单驱动的产品则往往手册第一章就是说明怎么定义各种表单,都是各种和界面相关的控件,比如单选多选下拉框、文本日期数字等。 其次可以看界面。...下图是分别是模型驱动的 OutSystems 和某表单驱动产品的相关操作界面,大家看是不是很不一样。...我们就以当年最流行的 Delphi 为例,Delphi 虽然号称“可视化编程语言”,但也就是实现了界面的可视化开发和数据库的 ORM,所有的逻辑都是要用代码写的,包括怎么把数据显示在表格也都要写代码。...(Delphi 的主界面,实现了用户界面的可视化设计) (Delphi 的逻辑实现界面,得写代码) 士别三日当刮目相看,何况十多年。今天的低代码并不是新瓶装旧酒,而是新瓶新酒,里外都是新的。...现在大家应该可以发现很多业界流行的观点说低代码适合这个那个的其实也都是错的,比如: 说低代码适合“简单的工作流和表单流转的应用”:事实上专业的低代码并不见得特别适合这类应用,比如 Gartner 就说

    55520

    2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s

    2024-12-20:两个字符串的排列差。用go语言,给定两个字符串 s 和 t,每个字符串中的字符都是唯一的,并且 t 是 s 的一种排列。...我们定义 排列差 为 s 和 t 中每个字符在两个字符串中位置的绝对差值的总和。 请计算并返回 s 和 t 之间的排列差。 1 <= s.length <= 26。 每个字符在 s 中最多出现一次。...大体步骤如下: 1.创建一个映射char2index,用来记录s字符串中每个字符对应的索引位置。 2.初始化排列差的总和sum为0。...3.遍历字符串t中的每个字符c,计算该字符在t中的索引位置i和在s中对应字符c在s中的索引位置char2index[c]之差的绝对值,加到sum中。 4.返回sum作为s和t之间的排列差。...总的时间复杂度:O(s + t) 空间复杂度分析: • 使用一个char2index映射来存储字符到索引位置的映射,空间复杂度为O(26),因为每个小写字母最多26个。

    8020

    2

    在本例中,我们将实现对一个数据表单的添加、修改、删除以及对表中数据进行查询的功能。   ...在FieldName里面填写你要建立的表单的属性名称,本例中要建立的是人员管理表,所以建立的属性为编号、姓名、性别、工作单位、工资、备注等。...除工资之外的属性都是字符串类型,即图中Type项所选择的A(Alpha),而Size则是指的字符串的长度,属性值的长度是根据属性的具体意义来确定的,例如“性别”选择只有“男”和“女”,一个汉字的长度,那么性别属性的长度设置成...这样就完成了第一步,这一步只是编程之前的准备工作,也是后面针对这个表单编写数据库应用程序的基础。下面要进行的就是实际的程序编写了,请打开Borland Delphi 5。     ...>这样控件的属性就设置完毕了,注意到dbgrid里面的“编号”、“姓名”等栏都是数据表中的属性,在ryb.db里面定义,而不是在前端的delphi程序里面定义。

    56820

    用代码拆掉你思维的墙,别人的肩都给你了,你还不站

    一个好的框架是可以让大家的代码标准化,这样多人写的代码基本都是统一的,不会存在意大利面条式的代码,过了一段时间,连自己看也看不懂,改也改不了。更别谈别人要接手了。...就拿说一段SQL连接查询表的流程来说: 创建连接SQLSTRINGCONECT 连接句柄是否>0,大于0继续。...福特汽车利用了流水线,每个人只管一道工序,把这个工序做到极致,这才是效率的最大化,同时也降低了汽车成本,让汽车变成人人都可以买。...在软件开发领域比如,权限已经写完了,新来的成员,压根不需要管权限是怎么实现,只需要在UI层表单newobejct一下权限类,是不是就拥有了权限。...需要调用客户信息的时间,直接就引用客户信息的表单,返回一个客户信息的对象,这样是不是开发也容易了?

    17420

    初探Windows用户态调试机制

    //注意:在Delphi调试器里会卡在这个地方,非调试环境下没有问题。...DbgUiConnectToDbg函数内部主要调用ZwCreateDebugObject创建一个调试对象,并将调试对象句柄保存在调试器当前线程的TEB结构的DbgSsReserved[1]中。...到此DebugActiveProcess函数在Ring3下分析的就差不多了,剩下我们可以看见把被调试程序和调试对象作为参数调用系统函数ZwDebugActiveProcess 我结合上面所说的是不是很清晰这个系统调用在内核做了些什么事情呢...调试事件的采取 首先我们应该明白什么算调试事件:被调试进程创建了一个进程、创建了一个线程、加载了一个模块......这些都是调试事件,那么调试器又是如何知道的呢?...我们看到采集调试事件中最后都是调用DbgkpSendApiMessage,那么这个函数到底做了些什么呢?

    75420

    E2161 Error: RLINK32: Unsupported 16bit resource in file “.dfm”

    Delphi程序的郁闷之处就在于各种第三方的库处理起来太麻烦了,总是有人喜欢引入一些从来没见过的东西,于是编译的时候就变得非常蛋疼,不是库不好找而是不同的版本导致出现各种错误。...一个正常的Form,在设计时,在窗体上点击右键,最底下的“Text DFM”应该默认是打上勾的(表示该窗体的DFM文件是以纯文本形式保存的),但是如果那个勾去掉,则该文件用记事本打开的话看到都是一些乱码...我当时遇到这种情况是有三个人同时在开发一个模块,后来某一天突然发现某一个窗体在其中一个人的机器上打开时报类似于楼主的错误,我发现那个DFM文件用记事本打开看到的都是乱码,而在我的机器上又可以用Delphi...不知道你的文件是不是在不同的机器编写过,你用记事本打开看看是不是乱码,如果是的话应该就是跟我一样的问题。...找一台可以用Delphi打开该文件的机器(上一次打开过这个文件的机器应该就可以),把“Text DFM”打上勾吧,呵呵。

    55650

    Django之Ajax文件上传

    我们使用表单上传文件时,必须让 表单的 enctype 等于 multipart/form-data,form表单不支持发json类型的contenttype格式的数据,而ajax什么格式都可以发...上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 表单也只支持这两种方式(通过 元素的 enctype 属性指定,默认为 application...(max_length=50) file=forms.FileField() 一个处理这个表单的视图将在request.FILES中接受文件数据 ,request.FILES是一个字典,它对每个FileField...;这就是文件数据怎样和表单沾上边的 。...处理上传的文件 最后的难题是怎样处理从request.FILES中获得的真实的文件。这个字典的每个输入都是一个UploadedFile对象——一个上传之后的文件的简单的包装。

    2.2K10

    Python+Selenium笔记(七):WebDriver和WebElement

    window_handle 获取当前窗口的句柄 name 获取该实例底层的浏览器名称 orientation 获取当前设备的方位 page_source 获取当前页面源代码 title 获取当前页面的标题...功能/属性 简单说明 size 获取元素大小(例如element.size) 下面都是以这种方式,element指定位的某个元素 tag_name 获取标签的名称 text 获取元素的文本值 方法 简单说明...提交表单。...如果对元素使用,将会提交该元素所属的表单 value_of_css_property(property_name) 获取CSS属性的值, property_name是CSS属性的名称 (四)  操作表单...register = login_area.find_element_by_link_text('注册') 8 9 register.click() 10 11 #检查打开的网页标题是不是

    2K50

    WINDOWS核心编程--Windows程序内部运行机制

    我们常用库函数printf----这些C库函数都是编译器厂商提供的。在windows平台下面也有类似的库函数,但这是windows操作系统提供的。...第一个参数 hInstance 表示该程序当前运行的实例的句柄,这是一个数值。当程序在 Windows 下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。...CS_HREDRAW: 当水平长度改变或移动窗口时,重画整个窗口 CS_NOCLOSE: 禁止系统菜单的关闭选项 CS_OWNDC: 给予每个窗口实例它本身的DC。...注意,尽管这样是很方便,但它必须慎重使用,因为每个DC大约要占800个字节的内存。 CS_PARENTDC: 将子窗口的裁剪区域设置到父窗口的DC中去,这样子窗口便可以在父窗口上绘制自身。...此参数可取下列值之一: windows应用程序的消息处理机制 windows消息机制详解 编写窗口过程函数 匈牙利命名法 举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为

    1.5K50

    加密壳之ACProtect系列通杀技巧

    值得额外提一点的是,ACProtect壳是Delphi编写的,经过测试发现它对Delphi程序的支持是最好的,其他语言编写的程序经过ACProtect加壳后可能导致程序本身异常退出,这可能也是ACProtect...别人的东西始终是别人的,只有自己的东西才是自己的,好好体会这句话你就知道了。 脱壳技巧 首先来看一下原始delphi程序的oep情况,如下所示: ? 接下来讲一下两次断点法,也被称为内存断点。...将程序运行起来,会中断在一个int3断点附近,这时注意栈上的数据,这里栈顶是SHE异常处理链的指针,SE句柄,就是异常处理函数,如下所示: ?...通过SE句柄,定位到内存,设置内存访问断点,如下所示: ? 同样的使用shift+f9,程序停留在这样的一个地方,如下所示: ?...当你看到cmp eax和MessageBoxA做比较的时候,那么恭喜你,你已经找到了IAT加密的部分了,修改掉je跳转为jmp,不过这个地址可能需要做更改,具体该不该,看之后跳转的地址是不是lea eax

    1.1K30

    威胁分析报告:11.深入了解Zebrocy的Dropper文档(APT28)

    步骤如下: 1.打开您最喜欢的十六进制编辑器,本文使用HxD 2.加载Word文档 3.搜索以下文本 – CMG= – GC= – DPB= 4.向每个添加一个x – CMGx= – GCx= – DPBx...= 5.保存更改的文件 当打开Word文档并查看宏时,您可以看到脚本和表单。...三.Wininition用户表单 当选择UserForm1时,文本框将显示一个 base64 编码的字符串,这正是我们上面讨论过的函数。下一步是将整个字符串复制到一个文件中,以便对其进行解码。...通过 winintion,我注意到Embarcadero字符串,这意味着这个二进制文件是用Delphi编写的。 在逆向Delphi二进制文件时,我总是使用IDR(交互式Delphi重构器)。...这将导入符号名、函数签名并为Delphi类创建结构。该插件从IDR生成的IDC文件中提取并应用Delphi符号,并且试图查找Ghidra错误确定函数入口点的情况。

    1.3K20

    Ajax技术全解(3)

    Ajax技术全解 之三 Ajax适用场景 1.表单驱动的交互 传统的表单提交,在文本框输入内容后,点击按钮,后台处理完毕后,页面刷新,再回头检查是否刷新结果正确。...Ajax不适用场景 1.部分简单的表单 虽然表单提交可以从Ajax获取最大的益处,但一个简单的评论表单极少能从Ajax得到什么明显的改善。而一些较少用到的表单提交,Ajax则帮不上什么忙。...4.替换大量的文本 使用Ajax可以实现页面的局部刷新,但是如果页面的每个部分都改变了,为什么不重新做一次服务器请求呢? 5.对呈现的操纵 Ajax看起来像是一个纯粹的UI技术,但事实上它不是。...特点是不通过常规的HTML来构造页面,完全使用JS以类似VB/Delphi风格的编程方式构造Web GUI界面,比较适合内网面向C/S风格的web应用,,而不适合面向Internet的界面多变风格的应用...YUL的优势在于文档非常齐全,而且有Yahoo的支持,缺点是库目前还是不是很全,功能也不强大。 铭铭 收集 资料来源: Ajax技术开发应用

    1.7K30

    建房从二楼开始,猫猫远程帮助小白之后想说的心里话

    当然是可以的,我们做成装配性建筑就好了。  我下面有建好的SQL执行类,大家可以看看,是不是感觉眼界大开啊。 MSSQLhelper 是执行SQL命令的封装类,,封装了常用的数据库操作。...oDBSQLhelper.ExecuteSQL("update Employees set LastName='123' where EmployeeID=1") 4 执行多个语句 需打开程序PRG或表单中进行测试...oDBSQLhelper.errmsg endif BROWSE 四、传递自定义连接句柄复用句柄 1 多账套通过账套名选择创建连接 ocon=Newobject("qiyu_connection","qiyu...","MSSQLHelper.prg","",nCon) *--执行SQL oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees") 2 自行创建的句柄 nCon=您自己创建的数据库连接句柄...我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

    40940

    2.1 PE结构:文件映射进内存

    PE结构是Windows系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的...,也就是至今还在使用的PE格式,PE文件的基本结构如下图所示: 在PE文件中,代码,已初始化的数据,资源和重定位信息等数据被按照属性分类放到不同的Section(节区/或简称为节)中,而每个节区的属性和位置等信息用一个...CreateFile 用来创建或打开文件的API函数,它可以接受一个文件名作为输入参数,并返回一个文件句柄。文件句柄是用来标识打开的文件的唯一标识符,后续对该文件的操作需要使用这个句柄。...这个函数需要传入一个文件句柄以及一个映像的大小。它返回一个句柄,表示创建的内存映像。...NULL) { // 设置读入文件基地址 GlobalFileBase = (DWORD)lpMapAddress; // 获取DOS头并判断是不是一个有效的

    27920

    2.1 PE结构:文件映射进内存

    PE结构是Windows系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的...,也就是至今还在使用的PE格式,PE文件的基本结构如下图所示:图片在PE文件中,代码,已初始化的数据,资源和重定位信息等数据被按照属性分类放到不同的Section(节区/或简称为节)中,而每个节区的属性和位置等信息用一个...CreateFile用来创建或打开文件的API函数,它可以接受一个文件名作为输入参数,并返回一个文件句柄。文件句柄是用来标识打开的文件的唯一标识符,后续对该文件的操作需要使用这个句柄。...这个函数需要传入一个文件句柄以及一个映像的大小。它返回一个句柄,表示创建的内存映像。...= NULL) { // 设置读入文件基地址 GlobalFileBase = (DWORD)lpMapAddress; // 获取DOS头并判断是不是一个有效的

    26710
    领券