一转眼发现博客里积累了不少文章,特别是这两年开始发现写博客也是一种提升自己技术能力的方法。这就和写代码一样,因为会让大脑思考,时间长了就会留下记忆。所以很多的高手都是通过这样的不断的重复训练来的。 也就是为什么一些快速成长的公司更容易产生大牛,因为如果初始的员工本身不够牛,业务很难大发展。底子在那里,加上各种实战自然就成长的快,时间长了不牛才怪。当然大牛的人还要会沉淀、思考、修正、分享,这或许是写博客的一个意义所在吧。 java开发相关 Tomcat shutdown执行后无法退出进程问题排查及解决 记一次
1、C:\Program Files (x86)\Borland\Delphi7\Bin\delphi32.exe。
导读:很多人认为程序员应该供的神里面排名第一的应该是Linus Torvalds,因为他是Linux和Git之父。
Delphi开发的数据库程序在C:\PDOXUSRS.NET生成文件,拒绝访问及读写权限, "无法打开 PARADOX.NET。这个文件可以随便删除的,下次会自动产生。
本文主要讲Python与Excel的关系以及集成方案,Office家族的其他成员,如Word、PowerPoint与Excel拥有类似的功能,Python同样可以与Word、PowerPoint等Office成员结合,这些内容我以后会写文章讲解。
窗体和应用程序类表示Form和Application对象,这些类是从TComponent派生而来,它们实际也是组件,单独地把它列举出来,以示与拖到窗体上的控件加以区别。
http://www.winu.cn/space-14160-do-blog-id-13766.html
本次知行软件为汽车电缆行业某客户提供EDI的技术服务,是同时和三位国外贸易合作伙伴进行EDI对接,在双方的共同努力下,最终成功对接了Nexans, KSD, Delphi三位贸易合作伙伴。
自Vue.js 3.0爆出,三大主流框架,写法也是越来越相似,越来越贴近 WebComponents 标准,而周边应用层面的封装已经开始指数级增长。小程序是今年最火的技术,接连出现,快应用也想分一杯羹。PWA(Progressive Web App)进入稳定期,尤其是 PWA桌面版,可以让我们更好的看清楚 PC 桌面版开发的全貌。移动端还是以强运营为主,各大公司都开始不再 全力推动 移动端了,开始重视多端并进,到了开始拼细节的阶段了。TypeScript 全面开花,GraphQL 蠢蠢欲动,WebAssembly 更是打开了浏览器上多语言的大门。所有的这一切都在暗示,浏览器即操作系统,你能想象到未来前端的样子么?
废话不多说,我遇到的情况是换了模版之后图片就不显示了。于是感觉是js出了问题,搜索图片的标签名称,找到了两个不同的js。并且在正在使用的js里面中文乱码了,如下图。解决方法也很简单,直接上传原始js替换掉现在使用的js。出现这个问题的原因在于模版转换工具从gbk转到utf的时候出了问题,事实上js文件不用转换。
Delphi是基于Pascal语言的RAD快速应用程序开发工具(Rapid Application Development),为Windows系统下的可视化集成开发工具,它提供强大的VCL(Visual Component Library,可视化组件库)
先上演示地址:http://images.24city.com/jimmy/QQCapture/ 注:首次点击,会提示未安装ActiveX插件,下载安装成功后,刷新页面,就可以截屏了。 提示:该ActiveX插件是我用Delphi7开发的纯绿色插件(调用了QQ公司的公开dll),默认会安装到c:\Capture下,大伙儿玩腻了以后,点击c:\capture\uninstall.bat,然后删除整个c:\capture即可. 思路: 1.截图功能在activex(即ocx文件)中完成,同时每次完成截图后,o
TypeScript是JavaScript的超集,当前的JavaScript的代码都属于TypeScript,都能在TypeScript环境下运行。
DelphiPI组件控件安装工具是一款用于安装Delphi组件的工具,对应delphi的不同版本,安装控件的时候有的需要先编译其他包,然后才能安装上这个控件,安装完成之后要在tool里的环境选项里的系统查找路径里填上控件的目录,这样delphi启动时才能找到你安装的控件。
自1995年Borland公司发布Delphi 1.0以来,Delphi受到很多开发者的亲睐,到1999年发布Delphi5,Delphi以其开发快捷、控件丰富、易于上手等优势吸引了众多的开发者,用户人数达到高潮,一度超越Visual Studio。可是好景不长,在推出Delphi7之后不久,Borland公司也走向衰败,最终被人收购,仅卖了区区7500万美元。 Borland公司倒闭的主要原因是公司财务出现困难,内部矛盾上升。但我认为深层次的原因是产品定价死板且价格过高,记得当时一套Delphi正版要卖68000人民币,而同期的Visual Studio仅卖一万多人民币。过高的定价导致很多人放弃使用正版用盗版。这可能是Borland公司财务困难的主要原因。 一、倒闭后的版本变迁 Borland公司倒闭后,先是到易博龙手中,再转到微软,最后到Embarcadero手中。Borland的最后版本是Delphi7。之后有Delphi2005到Delphi2010,这些版本基本不受Delphi开发者关注,因为D7就用得很好。Embarcadero推出DelphiXE,版本升得很快,目前已经到了XE10.2。并在XE5开始支持手机开发。引起一些Delphi的关注。 二、Delphi目前的用户人群 Borland公司倒闭后,导致很多Delphi爱好者信心产生动摇,加之Jave和.net兴起,许多开发者纷纷转向,放弃Delphi,Delphi用户群体急剧流失。经过若干年后,剩下的Delphi开发者估计只剩下三类人: 1、业余开发者,转向其他开发工具比较困难的人; 2、 Delphi死粉,这类人很少,程序员毕竟要吃饭,不会有人死抱着Delphi失业的,所谓死粉应该还是那些不愿意或有困难转向的人; 3、 手头有大量已有Delphi系统,无法全部重写,只能留在Delphi的人。 年轻的开发人员基本上不进入Delphi,大家都知道Delphi是一个没落的工具,学了也不好找工作,干脆不进来。所以,到目前,Delphi的开发者基本上是老司机。我曾去参加过一次Delphi XE的新版本发布会,参会的人基本上都在30岁以上,这还是好几年前。所以,Delphi可以说是后继无人。 老司机们的年龄最小估计也在35岁左右了,新人不进来,这些人将会在五年十年后淡出编程,大部分人到了这个年龄基本上想混个一官半职,脱离Coding的苦海。所以,Delphi命不长矣。 三、Delphi用户目前的困境 1、硬件及操作系统的升级让用户无法停留的D7上 大多数继续使用Delphi的人基本上仍在使用Delphi6或Delphi7的版本,后者人数较多。Delphi几经转手,继D7之后也出了一些版本,什么Delphi2005.net、2009、2010到现在有XE,XE都到十了。让老司机们无法继续留在D7的原因主要是操作系统及计算机硬件的升级,Delphi7之前的版本在XP 32位系统下运行很好,但到后面的Win7及64位系统就不灵了,加以对多核CPU的支持也没有。XP已经不被微软支持等。这样又迫使部分人离开Delphi,剩下的老司机考虑往XE上寻求升迁老的系统。 2、XE对Windows开发支持不好 从Delphi XE最新的版本取向来看,Embarcadero似乎更专注于移动开发,最新的版本还想走向Linux,而放弃对Windows的支持。D6和D7只专注于Windows上的开发,现在XE要同时支持Windows、Android、IOS和Linux,可谓战线拉得太长。对Windows的开发支持感觉越来越差。要知道现在主要用户是老司机,老司机走老路,EXE+DLL,他们要把老系统迁到新工具下,才能去继续按老方法使用Delphi的新功能,开发Android、IOS和Linux,但XE好象一到DLL就不行,这就不能解决老司机们的后顾之忧,老司机们的后顾之忧就是要把他们的那些旧坛坛罐罐搬到新的XE上面来,没有解决这个之前,他们不会心思去用XE的新功能。 另外,Delphi写Android、IOS和Linux不就是为老司机们准备的吗,新司机谁他娘的还用Delphi这破东西呢,何况Android、IOS和Linux下本身就有很多开发工具都是开源免费的,又正宗又原生态、又成熟又用者众,Delphi真是一点优势都没有,除了让那些只会Delphi又不愿离开Delphi的老司机用,还有谁用呢。 再说,用Delphi开发Android和IOS永远会落在别人屁股后面。因为Android是Google的,IOS是苹果的,这两家都有自己的开发工具,当Android和IOS升级时,人家自己系统立即支持新看到本,而Delphi还要等到Embarcadero是否
这还将为多种语言编译教程客户端和服务端。 有关此步骤的任何帮助,请参见从源代码构建指南。
程序君也年轻过,年轻的代价就是盲目追随。 从MS-DOS6.0开始,程序君就是微软的狂热拥趸。 这种狂热自win95走上高潮(有谁还记得win95光盘里带的Good Times的MV,请举手),历经《未来之路》,windows2000,最后在dotnet发布后到达顶峰。 那段时间,只要微软反对的,就是我反对的。 不喜欢Netscape Navigator,只因为IE;诅咒过SUN,对Java深恶痛绝,因为NC是PC的死敌,SUN妄图革微软的命;使用Visual Basic,啃MFC,不为别的,就因为powe
本文将以Android的USB串口通讯库为例,介绍Delphi如何在Android中使用Java的库。
用笔记本玩过War3的都知道笔记本下War3可能无法全屏显示,周末的时候我就遇到了这个问题。于是自己写了一个小工具来测试了一下,效果还是可以了。
在十年前首播的美剧《黑镜》中,第一集的剧名是《马上回来》,故事讲述了女主的男友不幸因车祸去世,在葬礼上,她的朋友告诉她,有个软件能收集一个人生前的所有信息,从而模拟出他生前几乎完美的对话功能。
铁打的程序员,流水的编程语言。时代在发展,编程语言也与时俱进,不断有新的、更好或者更时髦的语言出现,程序员也会或主动、或被动去学习一门新的、”更好“的编程语言。
前 言 一个号称目前最快的 Node.js 应用框架横空出世,高度专注于以最少开销和强大的插件架构为开发者提供最佳的体验。 作为开发者,让项目跑得更快一直是坚持不懈的追求。 一个号称是目前最快的 Node.js 应用框架横空出世 1 Fastify:Node.js 的 Web 框架 http://www.oschina.net/p/fastify ☞ 推荐理由:高度专注于以最少开销和强大的插件架构为开发者提供最佳的体验。Fastify 的 API 看上去非常简洁,称得上是支持 async/await 的
就会跟上面所说的那样,被迫成为一个全栈,这是比较尴尬的。 若你想比较准确的针对某个方向学习,那就继续往下看吧。
Delphi程序的郁闷之处就在于各种第三方的库处理起来太麻烦了,总是有人喜欢引入一些从来没见过的东西,于是编译的时候就变得非常蛋疼,不是库不好找而是不同的版本导致出现各种错误。比如alphacontrols这个鸟插件就测试了n个版本。其实这个不是最蛋疼的,最蛋疼的是处理完了所有的错误之后编译出现问题了:[DCC Error] E2161 Error: RLINK32: Unsupported 16bit resource in file “.dfm”
编译环境:delphi 2010+windows 7 u ,用途读取其他程序中readprocessmemory和writeprocessmemory的参数,但不知读取偏移即a+($b),b是怎么读的
本文收集了大量抓包工具,近40款,涵盖了各种开发语言(Java,C#,Delphi,C,C++,Objective-C,Node.js,Go,Python)、各类前端(GUI,TUI,CUI,Web UI,Browser Addon),请大家赏析。
* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《C/C++/Delphi 调用命令并且显示执行结果》 * 本文链接:https://h4ck.org.cn/2011/11/cdelphi-execute-cmd-commands-and-get-result/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
打开IDE ->Ctrl+Shift+O->赛选器输入disk如下图 配置好后点OK;
这篇文章主要介绍了 24 种编程语言的 Hello World 程序,包括熟知的 Java、C 语言、C++、C#、Ruby、Python、PHP 等编程语言,需要的朋友可以参考下。
在本次讲座中,我们以Delphi5为开发工具,标准的paradox表为后台数据库,来向大家介绍如何进行最简单的数据库编程。在本例中,我们将实现对一个数据表单的添加、修改、删除以及对表中数据进行查询的功能。
虽然firefox有模拟浏览器的东西,但是使用还是有很多弊端。有的信息没有办法模拟,于是就蛋疼的自己写了一个,应该是两个,还有一个txt版本,lol,就是下面的样子。
作为最受欢迎的编程语言之一,Java 已经走过了 20 个年头。从已经落寞的诺基亚到现在火热的电商系统,我们都能看到 Java 语言的身影。从 1995 年的第一个版本到现在的 Java 1.8,我们甚至能从Java 的版本迭代中看到不同时代编程语言关注的重点。经过了过去 20 年的发展,Java 已经成为如今使用最为广泛的企业级语言。为了庆祝 Java 的第 20 个生日,InfoQ 为此采访了 Java 技术专家彭晨阳(网络 ID:板桥)。
1.程序会自动获取Opera的个人数据的文件夹以及程序安装目录,通常不需要自己修改个人数据路径。
在读取时,引擎只需要输出所请求的列,但在某些情况下,引擎可以在响应请求时部分处理数据。
由于Vista以后win中加入的UAC安全机制,采用Delphi开发的程序如果不右键点击“以管理员身份运行”,则会报错。 在XE2以上的Delphi版本处理这个问题已经非常简单了。 右建点击工程,选择“Options”->“Applicaion”下,将Runtime themes项设置为“Use Custom manifest”,点击下方按钮,选择相应的Manifest文件即可。 需要注意的是:Debug和Release模式不同,要进行同样设置 至于Manifest文件,也就
delphi各个版本编译开关值 {$IFDEF VER80} - Delphi 1 {$IFDEF VER90} - Delphi 2 {$IFDEF VER100} - Delphi 3 {$IFDEF VER120} - Delphi 4 {$IFDEF VER130} - Delphi 5 {$IFDEF VER140} - Delphi 6 {$IFDEF VER150} - Delphi 7 {$IFDEF VER160} - Delphi 8 {$IFDEF VER170} - Delphi 2005 {$IFDEF VER180} - Delphi 2006 {$IFDEF VER180} - Delphi 2007 {$IFDEF VER185} - Delphi 2007 {$IFDEF VER200} - Delphi 2009 {$IFDEF VER210} - Delphi 2010 {$IFDEF VER220} - Delphi XE {$IFDEF VER230} - Delphi XE2 {$IFDEF VER240} - Delphi XE3 {$IFDEF VER250} - Delphi XE4 {$IFDEF VER260} - Delphi XE5
今天在逛一个上古论坛(Delphi盒子)的时候看了下下面的友链,发现一个星五博客 ,点进去看了一下,第一篇文章是基于pascal的网站开发。点击去溜达了一圈发现是一个国内的公司做的。
前段时间一直周旋于各种有趣且辛苦, 或者无趣且更辛苦的事情当中, 虽然其间也切换到其他好些不同的技术领域, 但一直没有放弃在AOP方面的关注思考. 前面之所以没有能接着AOP这个话题继续和大家聊下去, 是因为感觉自己没有足够的精力和空闲来将这些想法沉淀下来, 并回锅为简单直白, 易于消化和理解, 并能引发思考的东西. 这几天, 出差在外, 工作之余免去了灶台内外的忙活. 油烟味少了, 人也觉得清爽许多; 闲暇多了, 就免不了想爬爬格子. OK, 闲话到此为止, 就让我们继续AOP的白话之旅吧J 简单回
因为程序肯定是病毒,我就不上传杀毒网去查杀了。正常我们在分析一个未知恶意程序的时候,流程都是要先上传杀毒网看看。
先纠正一个观点,所谓自动安装并非强制安装,否则就变成流氓软件了,就算是silverlight,flash这类知名ActiveX,用户也有选择安装或是不安装的权利。 较正统的解决办法是提示用户设置IE权限,然后在object里加入codebase='ocx的下载路径',然后制作数字证书,个人觉得这样比较复杂。 我的办法: 1.先用js检测activex是否可用 <object id='x' name='x' classid='clsid:82AB2103-26BC-4999-8DDE-DF1A647D96E
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。 Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
概要介绍: 类类型和下面要讲到的类引用类型是一种特殊的数据类型,是Object Pascal面向对象编程的基础。 一:类类型概述 和以前介绍的几种数据类型相比,类类型具有如下特点: 类类型的成员可以是不同的数据类型,这一点跟记录类型相似,因此,类类型首先是由不同的字段 组成的。 类类型除了包含数据以外,还包含了操纵数据的方法及特性。类类型把数据和方法封装在一起。 类类型具有可继承性,所谓继承就是一个新的类类型,不必什么都从新定义,只需要继承一个已有 的类型再加上自己的成员就构成一个新的类类型。事实上Delphi中所有的元件都是从一些共同的祖先类 继承下来的,利用类的可继承性,您可以编写您自己的类元件,并把它加到Delphi的环境中去。 被继承的类我们称为基类,继承下来的类我们称为派生类,基类的成员自动成为派生类的成员。类 的继承具有传递性,例如假设T3继承了T2,而T2又是继承了T1,可以认为T3也继承T1。在Delphi中,所 有的类都是从一个共同的类TObject继承下来的,TObject类的声明在System单元中,它定义了一些操纵 类的最基本的方法,因此,Tobject也被称为缺省祖先类。 TObject是一个抽象类,它的派生类可以对TObject中的方法重载,包括对它的构造 Create 和析构 Destory的重载。 二:类类型的声明 类类型的声明比较复杂,其语法如下: Type 类=class(基类) [成员列表] End; 从以上语法可以看出,类类型可以指定一个祖先类型,表示该类型是从这个基类继承下来,如: Type TClass=Class(TObject) 这个例子,声明了一个名叫TClass的类类型,它是从类TObject继承下来的。注意,在Delphi中,类 名一般都是以T打头,以区别于其它数据类型。如果省略了指定基类,则表明直接从TObject继承下来。 成员列表的定义是这样 字段定义 方法定义 属性定义 类类型可以有三类成员分别是字段、方法、特性。字段的声明类型于记录类型中字段的声明,类类 型中的方法又可以分为4类,分别是构造、析构、过程和函数。分别用 Constructor、 Destructor、 Procedure、Function这4个保留字声明,类类型中的特性用保留字Property来声明,一个典型的类类型 示例如下: Type TClass=Class Private FX,FY,FZ:Integer; FS:String[128]; Public Constructor Create(X,Y,Z:Integer;S:string); Destrutor Destroy;override; Procedure Display;Virtual; Function SetStr(const Value:string); Publish Property Caption:String read FS Write SetStr; End; 上例中,声明了4个字段,数据类型分别是Integer和String。在Delphi中,一般私有变量字段都以 F打头。并且声明了一个构造CREATE,一个析构Destroy,一个过程Display,一个函数SetStr。另外还声 明了一个属性Caption。其它的语法元素如Private、Public等将在后面介绍。 注意:跟其它数据类型不同的是,类类型的声明只能出现在程序的Type区,而其它数据类型则可以 在Var区或过程或函数或方法的Begin语句之前声明。因此类类型的作用域总是全局的。 顺便提一下,类类型包括包含类类型分量的构造类型不能作为文件类型的基类型。 三:类类型的字段 类类型中的字段也就是类的数据部分,其声明方法同记录中字段的声明语法相似: 标识符:类型 其中字段的类型可以是各种数据类型,甚至是另一个类类型。 要访问对象的某个字段,跟访问记录变量中的字段类似,是用对象名加小圆点和字段名。 四:类类型的方法 类类型中的方法是个特定的名称,从形式上看也不过是一些过程或函数,不同的是方法是在类类型内部 声明的并只操纵类本身,因此在Object Pascal中方法有其特定含义。我们姑且都称它为方法。 方法的声明和定义 方法定义 方法首部;方法指示字 方法的声明跟变通的过程或函数的声明既相似也有不同的地方,相似的是声明时只需写出方法的首 部,不同的是声明方法时可以加上方法指示字。 方法分为4种
经过反编译动态调试,vcpp的类实际上就是struct,跟delphi不同,它没有类头,而且所有的函数都直接放在函数表里头,跟普通的函数一样混在一起。而成员变量,则直接就在对象头开始算起,成员变量的结尾是0xfdfdfdfd,如果没有成员变量,则对象的开头就是0xfdfdfdfd。
该专栏主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助。当然,由于作者英语有限,会借助机翻进行校验,还请包涵!
1.把WSDL的URL地址放到了HTTPRIO的WSDLLocation参数中,然后选择service和port 2.最近一个项目用到了delphi调用C#写的web服务的功能。用了一天的时间找原因,终于测试通过了。 这是一个通过web服务把一个照片上传到网站指定位置的方法。先测试了N次都不成功,通过跟踪发现delphi根本没传过来任何值,通过查资料发现VS2005 默认是用的 SoapDocumentProtocol而Delphi 是使用的 SoapRpcProtocol.这会造成所以客户端传过去的字
是的, 我就是鼎鼎大名的Javascript, 典型的高富帅,前端编程之王,数以百万计的程序员使用我来编程。 如果你没有用过我就太out了。
非常适宜Delphi初学者。 选择Delphi开发同学的眼光是不错的, 由于使用Delphi开发应用软件可以提高编译的效率, 前提是你要好好学习Delphi教程, 对你以后的开展肯定有很大帮助的。 Delphi(Delphi培训)是Borland公司研制的新一代可视化开发工具, 它应用范围非常广, 无论是Windows系统还是LINUX系统上都能完美运行。 书名:《Delphi2005程序设计教程》 作/译者:刘瑞新 出版社:机械工业出版社 出版日期:2005年07月 内容提要 本Delphi教程以Delphi2005为言语环境, 以程序文语结构作为主线, 面向对象的程序设计, 建立用户界面, 菜单、多选项卡的设计, 数据库应用程序开发根本概述, 数据控制组件, 应用窗体维护数据, 使用SQL结构化查询言语, Client/Server数据库应用程序开发, 适宜教师课堂教学和先生自学。 并增加了上机实训实验、数据库应用程序实例等外容, Delphi教程适宜作为初等院校计算机及相关专业先生的教材, 也可以作为各类计算机培训班的教学用书。 目录 前言 2. 2标识符与保留字、指令字 2. 5运算符和表达式 2. 1顺序结构 3. 2选择结构 3. 4过程与函数 第4章初级数据类型 4. 1类型定义语句 4. 4集合类型 4. 7指针类型 第5章面向对象的程序设计 5. 3类的方法 5. 4类的封装与继承 5. 5异常处置 第6章建立用户界面 6. 1窗体对象 DELPHI6. 3常用组件的用法 第7章菜单、多选项卡的设计 第8章数据库应用程序开发根本概述 第9章数据访问组件 第10章数据控制组件 第11章应用窗体维护数据 第12章使用SQL结构化查询言语 上文介绍的Delphi教程的评价是很好的, 非常适宜Delphi初学者。 选择Delphi开发同学的眼光是不错的, 由于使用Delphi开发应用软件可以提高编译的效率, 你会发现Delphi更多的优点。 对你以后的开展肯定有很大帮助的。
MIT的研究人员建立了一个「人工智能框架」——从发表过的论文登出版物中收集模式,通过学习,识别出对未来将会产生巨大影响的技术,并发出「早期提醒」。
VER180 : Delphi 10.0 CodeGear 2006/2007 VER185 : Delphi 11.0 CodeGear 2007 VER190 : Delphi 12.0 CodeGear 2008 VER200 : Delphi 13.0 CodeGear 2009 VER210 : Delphi 14.0 Embarcadero RAD Studio 2010 VER220 : Delphi 15.0 Embarcadero RAD Studio XE VER230 : Delphi 16.0 Embarcadero RAD Studio XE2 VER240 : Delphi 17.0 Embarcadero RAD Studio XE3 VER250 : Delphi 18.0 Embarcadero RAD Studio XE4| VER260 : Delphi 19.0 Embarcadero RAD Studio XE5 VER270 : Delphi 20.0 Embarcadero RAD Studio XE6 VER280 : Delphi 21.0 Embarcadero RAD Studio XE7 VER290 : Delphi 22.0 Embarcadero RAD Studio XE8
Delphi写的程序,如果在单元的finalization里出现了一些异常操作会导致退出时抛出Runtime Error ,规范的处理办法当然是解决这些异常,但是有些特殊的情况下,比如用了很多的第三方控件,实在没办法解决问题时,只有把他屏蔽掉,这样给客户的时候就不至于看到满天的Runtime Error 了。 做法其实很简单,就是在 END.之前手工调用Halt释放,并且将Halt抛出的错误屏蔽掉,这样做和正常的DELPHI释放过程没有任何区别,因为End.编译后其实就是一句话 Call Halt0,只是VCL自己没有屏蔽Halt0里抛出的错误,而是跳出个Runtime Error 来; 首先就是位置的问题,如果是EXE的话,直接在END.之前就行了,如果是Dll的话就麻烦点,需要挂上DllProc,当wReason = DLL_PROCESS_DETACH时处理。 然后就是如何屏蔽错误的问题了,第一个最容易想到的做法就是直接 Try halt except end; 但是这样是不行的,因为try…except end捕获的错误都会放到System单元的_HandleOnException中处理,函数检查错误类型是否是DelphiException,如果不是就不处理,这个时候就会被DELPHI的顶层异常机制捕获,并抛出Runtime error,halt里抛出来的错误恰恰就是非DelphiException,代码如下: procedure _HandleOnException; … CMP [EAX].TExceptionRecord.ExceptionCode,cDelphiException JE @@DelphiException CLD CALL _FpuInit MOV EDX,ExceptClsProc TEST EDX,EDX JE @@exit CALL EDX TEST EAX,EAX JNE @@common JMP @@exit … End; 所以,需要借助SHE机制来处理这个问题,代码如下: asm //挂上SEH xor edx, edx push ebp push OFFSET @@safecode push dword ptr fs:[edx] mov fs:[edx],esp //调用Halt0 call Halt0 jmp @@exit; @@safecode: //如果出现异常继续调用Halt0退出 call Halt0; @@exit: end; 这个做法的好处就是,不会对DELPHI正常释放过程产生影响,所有的释放操作都是和VCL一致的,只是不会把错误显示出来。 以下是完整代码: 一、EXE的情况,把代码放在工程文件 procedure Halt0; begin Halt; end; begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; asm xor edx, edx push ebp push OFFSET @@safecode push dword ptr fs:[edx] mov fs:[edx],esp call Halt0 jmp @@exit; @@safecode: call Halt0; @@exit: end; end.
领取专属 10元无门槛券
手把手带您无忧上云