Delphi

2020年2月中国编程语言排行榜

瘦欲@ 提交于 2020-05-03 19:26:45
编程语言比例 排名 编程语言 平均工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 21433 20000 5266 45000 369 0.11% 2 typescript 18727 22500 6500 30000 1841 0.57% 3 go 18292 16000 6175 40000 23860 7.35% 4 lua 18219 17500 5000 37500 2676 0.82% 5 python 17834 15000 3750 45000 26507 8.17% 6 haskell 17713 15714 7500 27000 47 0.01% 7 ruby 17420 17500 3750 37500 913 0.28% 8 matlab 17384 16000 5000 37500 5030 1.55% 9 julia 16525 12500 12500 25000 20 0.01% 10 perl 16326 14583 4950 37500 2102 0.65% 11 kotlin 16318 15000 6500 34521 803 0.25% 12 cpp 15763 13500 3750 37500 55817 17.20% 13 swift 15657 13500 5250 36225 2236 0.69% 14

Delphi IOCP UDP完成端口服务端——网络高速传输数据文件系统架构

柔情痞子 提交于 2020-05-02 21:51:49
嗯,是的,标题有些那个,不过浏览器搜索出来的几乎全部是C++的,Delphi这块完全是空缺的。 不知道各位Delphi的爱好者们有没有关注腾讯这段时间的各种信息推广。涉及到各方面的行业。 不过我最佩服的是他们的实时各种网络行为,不得不说,他们的服务器确实牛逼,各种实时网络视频各种交互都是相当流畅的。 除了 TCPIOCP 完成端口成型之外,在这个基础上,继续调试出了 UDPIOCP 完成端口系统,弄这个玩意就是想做一个能够在目前这种复杂无比的网络中,能够完成游戏资源实时更新的一个高并发服务系统。 现在的网络简直复杂得像一堆牛屎那样,你看看你桌面上的任何一个程序,有几个是不联网的?几乎没有吧!现在的玩家有几个电脑上面是不同时打开几个程序的,QQ,各种音乐播放器,各种视频播放器等等,这些都是抢夺带宽最厉害的玩意。所以传统的TCP协议的网络传输系统已经很难符合目前这种复杂的环境了。 UDPIOCP完成端口 这个玩意,构建起来不容易,网上能用的代码,一句话:没有!不相信,自己搜索搜索。 这个玩意比TCP完成端口还复杂。 两个控件,一个UDP服务端,一个UDP客户端,至于客户端是自己新写的,内含两种设置,一种是采用常规TCP那样的链接模式,一种是非链接模式,可以设置阻塞或者异步传输。 上面客户端采用定时器,值设置为10,这种速度发送消息比较快了,上面是两者的CPU占用情况。在完全没有优化之下

[原创]K8Cscan插件之Host2IP(批量域名解析/主机名转IP)

橙三吉。 提交于 2020-05-02 05:12:03
0x001 前言 在内网渗透中,有时候通过域或日志导出一些机器名,或者管理员备分文件等方式获取 只有主机名或者域名时,就需要先解析出IP获取相关IP或IP段,才好进行下一步扫描。 0x002 用法 首先下载Host2IP插件,该插件为Delphi编写,所以只需一个DLL文件,不像.net写的DLL .net版本和EXE版本不对应,可能会导致某些功能问题。好了废话不多说,下面进入正题 同一目录下需要以下3个文件 ip.txt 存放需要解析的主机名或域名 cscan.exe 主程序一个(对应.net版本) Host2IP插件 descan.dll 其次运行Cscan即可,默认Cscan为Ping扫描,如果内网中存在禁Ping机器,则需nocheck参数 其它插件同理,大部份内网代理工具并不支持ICMP,无法Ping通,Cscan请使用nocheck参数。 0x003 下载 https://github.com/k8gege/K8CScan/raw/master/Cscan Moudle Host2IP.rar 来源: oschina 链接: https://my.oschina.net/u/4351274/blog/3435941

Linux下kbmmw 服务器的开机自动启动

自闭症网瘾萝莉.ら 提交于 2020-04-30 13:12:14
要实现Linux下kbmmw 服务器的开机自动启动,必须使用linux daemon 技术,此项技术的实现具体可以通过网上查询, 今天主要写一下具体实现方式,Linux daemon的实现方法很多,但是都有一些不尽人意的问题,最近在Github 发现了一个 实现方式,经过测试发现,比较完美的实现了Linux daemon的开发。 https://github.com/EvgeniyKorepov/LinuxDaemonNewStyle 我们首先下载文件保存。 使用delphi 10.3.3 建立一个控制台工程,添加一个TDataModule,防止我们常规的kbmmw server等控件。 添加kbmmw smartservice. 加入刚才下载的两个文件。工程文件如图 另存工程名为 Linuxdaemon. 修改UnitDaemonNewStyle.pas 文件。 我是ubuntu 20.4,这一块修改为/var/run/ . 切记修改。 整个工程源码如下 program Linuxdaemon; { $APPTYPE CONSOLE } { $R *.res } uses System.SysUtils, kbmMWConfiguration, kbmMWCrossSockethttpServerTransport, kbmMWTCPServerTransport,

FireMonkey tRectangle with tLabel child

最后都变了- 提交于 2020-04-30 11:12:27
问题 I am coding a custom control based on tRectangle : tMyRect = class (tRectangle) On the tMyRect Constructor , I create a tLabel : fRectLabel := tLabel.Create (Self); and then set some properties for it. At runtime, the tLabel is not showed according to the properties settings, neither responds to the speedkey. Follows the complete code: unit frmMyRect; interface uses FMX.Controls, FMX.Controls.Presentation, FMX.Forms, FMX.Layouts, FMX.Objects, FMXFMX.StdCtrls, FMX.Types,System.Classes, System

Delphi

五迷三道 提交于 2020-04-29 12:02:54
项目背景   近期,总经办邮件反馈考勤数据频繁丢失,请IT排查其根本原因,并提供整改措施。   措不及防,这个项目当初并不是IT主导的,是设备部采购,然后协同软件供应商直接安装、部署和调试的,IT只是提供几个数据库表接口给供应商。然后我们就开始在设备、总经办、供应商之间相互扯皮,之所以扯皮的原因是,经过供应商排查并没有发现任何问题(具体情况不得而知),也就是说他们也不知道造成数据丢失的具体原因。   求人不如求己,后来我们这边排查数据库日志,发现在数据丢失的时间段内,数据库和上位机之间很少或者说基本没有数据交互。继续排查设备上位机日志,发现其网络端口会有间歇性响应异常等问题,重启端口后一切正常。   知道这些以后,那接下来问题就简单了。 解决方案 项目总目标      客制化一个系统/脚本,实现定时检测某个网络端口相关功能是否正常,通过其DLL接口实现端口刷新或重启,并将日志通过邮件方式发送给指定人员。 节点目标一 :网络端口通断检测模块; 节点目标二: DLL接口重写,实现端口刷新或重启模块; 节点目标三 :日志检测和邮件发送模块; 节点目标四 :定时模块。 关键模块Demo 下面给出几个关键模块Demo 网络端口检测模块(需要引用IdIcmpClient单元) 1 var 2 icmp: TIdIcmpClient; 3 rpss: TReplyStatus; 4 begin

Delphi函数的out、var等关键字的作用,和使用场景

主宰稳场 提交于 2020-04-29 11:08:10
问题描述 Delphi函数的out、var等关键字的作用,和使用场景 Delphi函数的out、var等关键字的作用,和使用场景,我知道var是作为传值调用,但是像out这个关键字又是什么作用呢? 解决方案 在过程或函数中,out主要用于COM和CORBA技术,Delphi解释: An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input. 关键就是“它唯一的用处就是让写过程的程序员提醒一下,这个参数没有什么初始值的,只能给它赋值,而永远不要去用它的值。” 1、相同:var与out修饰的参数,都是通过指针引导的变量参数;它们都可以外出输出值; 2、区别:var修饰的参数,可以带入值,并在过程或函数使用

Delphi

故事扮演 提交于 2020-04-29 11:03:59
Delphi SuperDll 作为一名5年的Delpher,一直认为Delphi是桌面应用的王者,我相信其他的Delpher也这么认为。 但是,慢慢的我发现普通方式的Delphi开发会造成代码的严重臃肿,特别是MDI类大型项目、多人同时开发的情况下。 举个例子,一个Delphi常用的业务逻辑,数据导出到Excel,完全可以写成一个公用的模块放置在业务单元,子窗体用到时直接调用即可,但是一般情况下,事情并不止想象的那么简单,维护人员的思想真的一言难尽。 后来,我有了将Delphi中常用的业务逻辑功能封装成DLL的想法,所有的业务逻辑只能在DLL中实现,系统中不允许直接写业务逻辑,只能调用DLL。 这么做的好处是,相同的业务功能不会被重复开发,大大减少了代码的臃肿,同时,业务逻辑开发人员和前台开发人员独立开来,提高了开发效率。 这里就是SuperDLL的由来,后续将持续更新。 请看如下代码: 更新日志: //初始化 //邮件发送 //FTP上传、下载 //cxGrid数据导出 1 library SuperDll; 2 3 { Important note about DLL memory management: ShareMem must be the 4 first unit in your library's USES clause AND your project's

Delphi结构体的扩展,可以自动初始化,反初始化,自定义拷贝函数.

荒凉一梦 提交于 2020-04-29 10:26:32
文章转贴,原文地址为http://www.raysoftware.cn/?p=518 众所周知Delphi的record和CPP的struct是有区别的.CPP的struct可以看成是class的别名,可以有构造,析构,可以继承. Delphi的record几年前开始支持方法,支持操作符重载,美中不足之处在于不能自己写默认构造函数.Delphi的帮助文档说可以自己写有参数的constructor但是不能写不带参数的constructor/destructor.但是实际上除非是有引用类型变量,否则结构体不会被初始化. 这就产生了一些问题, 比如说我要借助record的操作符重载,重载+,:=等操作符,自己实现一个string record.但是这个record每次声明以后必须要手动初始化一下,否则里面的内容未被初始化,是随机值. TString = record</pre> len : Integer; //这个不会被自动初始化 data : pchar; //这个不会被自动初始化 class operator Add(a, b: TString ): TString; end; 实现了一个结构体的初始化,反初始化,拷贝的自动调用单元. 只要你的结构体引用了AutoRecord这个类型的变量,那么结构体就可以自动调用初始化,反初始化,拷贝. 比如: TTest = record _

delphi 全局变量的定义与初始化赋值

我与影子孤独终老i 提交于 2020-04-29 08:49:33
delphi全局变量的定义与赋值主要有下面几种方法: 1. 全局变量的初始化 在最后结束的end.之前,增加initialization关键字,然后加入对全局变量的初始化,这样就可以初始化全局变量了.不论在interface还是在implementation部分的全部变量,都可以这么来初始化 //省略前面的interface, uses, type. var i: Integer; implementation var j: Integer; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Inc(i); Inc(j); Form1.Caption := IntToStr(i) + ' ' + IntToStr(j); end; initialization i := 100; j := 200; end. 2. 新建一个公用单元,专门放置公用全局变量呗 unit untCommon; interface var v1:integer; v2:string; end. ----------------- unit unit1; interface uses windows, ................, untCommon ; //在每个需要使用v1