随笔分类 - Delphi
感觉有用怕忘掉的一些技巧,还有一些感觉比较好的东西
摘要:该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用
阅读全文
摘要:delphi-romhttp://code.google.com/p/delphi-orm/source/checkout Marco Cantu is a big believer in InstantObjects:http://www.instantobjects.org/Others include DObject:http://www.macrobject.com/en/dobject/and tiOPFhttp://tiopf.sourceforge.net/Doc/overview/index.shtmlYou also might be interested in the G
阅读全文
摘要:由于最近在看UDP打洞,本着力求精简,不用三方控件的原则下,折腾了Sockets.pas这个单元。在弄清如何用Sockets单元中类执行udp server的功能时,发现了一个小BUG。BUG描述: 无法判断UDP数据包是谁发来的。这个BUG存在于TIpSocket类的ReceiveFrom方法中,功能是从当前的Socket中接收数据包,并可以返回对方的TSockAddr,在UDP接收中,这个很重要,因为UDP需要知道数据包是从哪里发送来的。 此函数的实现为:function TIpSocket.ReceiveFrom(var buf; bufsize: Integer; ToAddr...
阅读全文
摘要:在不同的DELHI版本中,INDY的版本是不同的,而且9和10不兼容,为了让代码简单,轻便,跨版本移值,决定udp使用时使用TUdpSocket控件来实现收发。结果却令人郁闷的发现,无法接收,因为TUdpSocket是为作Client设置的,没有进行Bind,于是,显式调用了Bind,依然不行,返回一个错误码。查看netstat ,显示的是一个随机的端口。 由于对WINSOCK底层不是很了解,看源码时没有发现什么问题。结果在CSDN上有人指出了问题所在,TUdpSocket在Open时会调用Connect,而Connect时会bind到一个随机的端口,所以再次bind时会失败。 原来如...
阅读全文
摘要:UDT是用UDP实现,以可靠传输为目标的一套开源库,其源码可以在SF上找到,直到现在不久,才发现是它是国人的一个开源软件,向研究此协议的谷博士致敬,在当前的浮燥环境,尤其可敬。 网上有SDK作者本人写的一个DELPHI的UDT.pas的头文件,本来想用它来封装一个类似TTcpServer和TTcpClient的组件,但半途中发现udt的select函数的参数是C++中的Vector类型,这在Delphi中没有,而UDT.pas中也没有相关的定义。于是自己动手,丰衣足食,自己下载下来代码,手动重新导出已有的函数,新加并导出必要的函数。 关于编译SDK 对C++不熟悉,虽然网上有相关的讨...
阅读全文
摘要:一般情况下,我们并不需要替换VCL的代码,但是,如果有某些特别的目的需要更改VCL中默认的执行逻辑的话,下面的东西应该有用。另一种方法是用Inject,但是,如果是你自己的程序,且有源码,用下面的办法就会省事的多了Procedure PatchVCLCode(ProcOld, ProcNew: Pointer);var newCode : packed record JmpRel32 : Byte; Offset32 : Integer; end;begin newCode.JmpRel32 := $E9; newCode.Offset32 := Integer(p...
阅读全文
摘要:纯计算方式:procedure ByteCrc(data:byte;var crc:word);VAR i:BYTE;BEGIN FOR i:=0 TO 7 DO BEGIN IF ((data and $01)XOR(crc AND $0001)<>0) THEN BEGIN crc:=crc shr 1; crc:= crc XOR $A001; END ELSE crc:=crc shr 1; data:=data shr 1; // this line is not ELSE and executed anyway. END;END;func...
阅读全文
浙公网安备 33010602011771号