自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无常之语,无心之果(by 僵哥)

不语不为过,语而不诺实不诚

  • 博客(25)
  • 资源 (27)
  • 收藏
  • 关注

原创 Base64Decode With 16Bits-CoderTable

采用三个码表来完成,码表的范围是0x2B2B~0x7A7A,考虑到寄存器的有限性,故将三个码表合并为同一个数组,在程序当中通过偏移量分段检索。

2010-10-01 17:46:00 1623 1

原创 Base64Encode With 12Bits-CoderTable

Delphi嵌入汇编版Base64编码过程,采用有效位为12位的16位码表

2010-09-28 19:07:00 990

原创 Base64编码(汇编版,未做过多优化,性能自认为还可以)

采用8位码表的Base64编码过程(Delphi嵌入汇编代码)

2010-09-28 11:24:00 2466 3

原创 计划比不上变化

<br />正所谓计划不如变化,所以我现在已经很少很少做所谓长远的计划,不是我不愿意去计划,而是在我的历程当中所有的计划最终都被变化所取代。我是一个规矩的,其实更习惯到有计划有规律的生活,但是每每我都被现实的生活所打败... 原计划当中领导只是提到要求取消windows版的服务器程序,而我正想努力一把,说服领导的这一待定的决定。今天又听同事说客户端程序要取消Delphi开发,换用VC,这还是公司上层领导的决定,据此客户端程序的Delphi开发团队的命运也就可想而知了,据此我们服务器的Delphi开发团队也就

2010-06-07 21:41:00 1902 9

原创 走一程,回到原点

  此次北京之行,纯属计划外的行程,来回都显得如此匆忙。这一程回来,感觉真象是回到了一个原点。整个行程当中的所见所闻足以让我心潮澎湃,我很奇怪,别人的成功,别人的规划从来都无法给我些许触动,但是本次却非常例外。 我一直都在为自己编理由,一直都在浪费时间,一直都是。什么计划都不曾有,从02年毕业,更准确地说应该是从01年底离开学校,到现在已经足足过去了近八年。看似有那么点出息,其实除了嘴巴上比以前“

2009-04-23 00:32:00 1804 9

原创 关键字(非词)检测

//保留字序列 __declspec(thread) bool  ReservedTable[65536] = {0};//清除或设置保留字状态 void __fastcall SetAllReserved(bool Reserved = true){    for (int i = 0; i         ReservedTable[i] = Reserve

2008-11-20 20:11:00 1357

原创 Windows Resource File(.res)文件格式拆解(入门)

鄙人查当懒,望大家见谅。正好今天回复VB版的某贴子写了几行字,感觉有点用处,就记录下来虽然代码都是现成的,但是要改成VB,那也不是很简单的事情。如果你把所有的东西都弄完,粗粗估计也要半个月到一个月,而且还要求其中所有的技术访问都比较娴熟。 如果只是把资源数据的结构分解出来,倒不算难。MSDN(http://msdn.microsoft.com/en-us/library/ms648027(VS

2008-11-15 18:10:00 6081

原创 人民币中文大写转金额

 type  MoneyType = Currency; //这里可以是Double,但是浮点数存在误差,也可以是Currency,但是大小有限制 function ChineseCapital2Money(Capital:WideString): MoneyType;var  szNum:PWideChar;  Sign: MoneyType;  dblCur

2008-11-09 20:29:00 1866

原创 Delphi版金额大写(人民币大写读数)代码

 首先非常感觉xxaacc 发现了原来写的那份Delphi代码当中的问题(测试数据:1000100011.12).原来的代码是03年写的了,最初的代码也是用C++写的,然后转换成Delphi代码.当是发布以C++Builder,从而为了速度优化等,得到了tiegerium(/*唐秀观*/)支持,而得以完善.  uses        math;const  mnUn

2008-11-08 23:52:00 5114 1

原创 修改PE文件版本信息(简单演示)

struct VS_VERSIONINFO {  WORD  wLength;  WORD  wValueLength;  WORD  wType;  WCHAR szKey[];  WORD  Padding1[];  VS_FIXEDFILEINFO Value;   WORD  Padding2[];   WORD  Children[]; };

2008-10-14 23:11:00 5078 2

原创 基于TClientSocket简单模拟需要验证的SMTP邮件发送附件(C++Builder)

//--------------------------------------------------------------------------- #include  #pragma hdrstop #include  #include "Mail.h" //--------------------------------------------------

2008-09-22 13:06:00 3991

原创 用TClientSocket做HTTP文件下载(Norton LiveUpdate,C++Builder)

//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------

2008-09-22 12:59:00 2731 3

原创 人民币读数(转中文大写,C/C++)

 //早年写的代码,功能很简单,以效率为主要目的#include #include //为兼容VC,对串增加一个结束符的空间 于2008.10.16更新 (2008.9.23修改)//const char mnUnit[3][2]=]={"分","角","元"};//const char OtherWords[2][2]={"整","负"};//const char

2008-09-22 12:44:00 4775 8

原创 基于CRC20散列的百万账号快速查找模拟

基于数以百万级的账户信息里面进行账号的校验并不是一件容易的事,关键点在于具体账户信息的定位.本文的主题仅仅只是为了应用的实现,就不再去做散列和排序各种算法之间的对比.对于一百万的账户信息,使用多大的散列表进行存储,是需要考量的.对于散列腹得最多的应该属256桶的Hash Table,但是在最好的情况下一百万账户信息在256桶的散列表当中重合率达到了近4000,而再从这当中进行二次搜索,同样也是一个

2008-09-03 23:35:00 2551 1

原创 Delphi/C++Builder在没有做任何代码修改,重新编译后CRC不一致的解决方案。

Delphi/C++Builder在没有做任何代码修改,只要重新编译后,再计算CRC,就会与原来不一致的。经同事的朋友查得是时间戳在做怪。解决方案见贴子:http://topic.csdn.net/u/20080613/11/9fa12d6b-473d-4ac9-a091-0b02f4ffcac6.html下面只贴出代码:function FileDateToDateTime_UT

2008-06-16 22:53:00 2177

原创 让BDS2007(Delphi2007&amp;C++Builder2007)编译出一个个性的文件名,而不是以Project的名称来命名

在BDS2007当中调用的是MSBuild来完成最终的编译,而其实MSBuild支持来指定文件名,但是BDS2007却对它“视而不见”,虽然你可以手工去编辑Delphi/CB的project源文件,来指定一个,但是编译是可以生成一个际定的文件名,却无法在IDE当中通过Run或F9来执行,并且也无法在IDE当中完成改名。不过,很有意思的是,在工程选项的Application当中,却可以指定文件的

2008-06-08 16:34:00 2769

翻译 在Delphi当中调试COM+组件

How to debug a COM+ component in Delphi. 如何在Delphi当中调试COM+组件 Abstract: Debugging a COM+ component on Windows 2000. 摘要:在Windows 2000当中调试一个COM+组件(WinXP/Win2003适用) Assuming you have already created a COM

2008-05-28 23:22:00 2733 3

原创 DCOM当中保证异步作业不因远端COM客户断开而中止的解决方案(Delphi)

问题起源:最近开发了一个DCOM服务器,内部有个队列任务。客户端可以连接调用以添加任务到队列。现在有个问题是当客户端调用完断开连接后,DCOM服务器的队列任务还没执行完毕DCOM就退出了。请问有什么办法可以让队列执行完才退出呢?简单的解决方案演示:演示是通过增加一个方法Method1,被用户调用后,记下自己当前的ThreadID(GetCurrentThradId获得),然后调用_Addref

2008-05-28 16:40:00 1444

原创 对TServerSocket实行IP绑定之二(继承方式,只用于演示,除非必要不推荐使用)

BDS(Delphi/C++Builder)当中的TServerSocket估计是基于简单应用或者学习的目的考虑,所以直接就绑定了泛地址,而不支持针对性的IP地址绑定,这也就使得一些特殊的环境让人感觉有点不舒服,甚至有点无奈。本文就简单介绍一种“曲线破解”法来解决这个绑定的问题。本示例主要是基于BDS2007的TServerSocket,其它版本请根据实际情况进行调整未必都能实现。//基于继承

2008-05-27 10:59:00 1230 1

原创 对TServerSocket实行IP绑定之一(辗转方式,只用于演示,除非必要不推荐使用)

BDS(Delphi/C++Builder)当中的TServerSocket估计是基于简单应用或者学习的目的考虑,所以直接就绑定了泛地址,而不支持针对性的IP地址绑定,这也就使得一些特殊的环境让人感觉有点不舒服,甚至有点无奈。本文就简单介绍一种“曲线破解”法来解决这个绑定的问题。本示例主要是基于BDS2007的TServerSocket,其它版本请根据实际情况进行调整未必都能实现。//简单演示

2008-05-27 10:56:00 2069 1

原创 Delphi版Ocx制作CAB

unit UnitMakeCAB;interface  uses      ActiveX    , SysUtils    , Classes    , Windows;//.inf文件模板const  Templete =    ; %Title%#13#10+    ; File Name %DLLName%  File Version= %DllVersion%#13#10+ 

2008-05-25 23:54:00 4589 5

原创 制作OCX的网络发布CAB包

 #include  //.inf文件模板 const  AnsiString Templete ="; /%Title/%/r/n/; File Name /%DLLName/%  File Version= /%DllVersion/%/r/n/; ProgId= /%ProgId/% ClassId= /%DLLClsid/%/r/n/r/n/[v

2008-05-25 21:38:00 4957 4

原创 TMS套件当中TAdvMemo对多字节文字(MultiByte)-中文支持的修正

//--------------------------------------------------------------//        MOVE CURSOR//--------------------------------------------------------------procedure TAdvCustomMemo.MoveCursor(dX, dY: integ

2008-05-21 09:54:00 3625

原创 一个性能还不错的DES加密库(转换自同事改写的一份C++代码)

由于项目需要将日志进行加密,并且合同附件写明是使用DES,不得已而做了下来,经过测试,性能仅为原来没有加密前的九至十分之一,而现成的东西不确定是否为线程安全的,即便是使用DLL库,进行线程分离加载也算大废周章。难耐之下,取来一C++的DES加密单元进行了代码转换,直接将其中公共变量(存在线程安全问题)声明改为threadval,调入程序当中,发现性能还不错,是原来加密库的四至五倍,接近不加密时的4

2008-03-19 11:41:00 2909 2

原创 Delphi使用Zlib、C++Builder使用Zlib

2010-10-06 修正解压缩代码uses zlib;//将Src使用Zlib压缩后存入Dst当中 procedure PackStream(const Src:TStream; Dst:TStream);var CompStream: TCompressionStream;begin //增加“断言”以防止输入参数有误 Assert(Src <

2008-03-10 23:14:00 5766 5

Inno Setup 5.4 with CodeSign Support

1. 添加签名工具命令行,参数类似于: SignCode=$qSignTools\signtool.exe$q sign /f $qCerts\[Certificate].pfx$q -d $q[Software Name or Company]$q -du $q[http://www.mydomainhost.com]$q /t $qhttp://timestamp.comodoca.com/authenticode$q $f 其中[Certficate]请使用实际的数字证书文件名代替,[Software Name or Company]使用一个有用的提示信息或标签,比如软件的名称或公司的名称,[http://www.mydomainhost.com]使用公司或软件的网址 2.代码[Setup]节添加如:SignTool=SignCode,启用代码签名,此处如果没有其他配置则会对卸载程序和安装程序进行签名 3.[Files]节点当中对具体的文件添加“;SignCode: Yes ”启用对该文件(或文件组当中所列的文件,仅Window PE可执行文件或称程序文件)进行签名 4.可以参考附图,也可以参考帮助文件 5. 本程序根据官方5.4版本进行修改,主要是添加了对程序文件的签名,目的是在打包的时候可以很方便的一次性对所须文件进行签名,而省去麻烦

2010-11-04

Base64.dll(Base64编解码,附VB示例)

Base64编码和解码库,支持API调用和COM调用,输入参数支持VB的字节数组Byte(),输出支持VB的字节数组Byte()和字符串String。编码速度大约为每秒钟256MB~380MB。 内附一个比较三方提供的比较经典的库VBVorLib,其性能也相当不错。本程序库比之稍快,内附截图。 Public Declare Sub Encode Lib "Base64" (ByRef Dest() As Byte, ByRef Src() As Byte) Public Declare Sub EncodeToVBString Lib "Base64" (ByRef Dest As Any, ByRef Src() As Byte) Public Declare Sub EncodeToVaraint Lib "Base64" (ByRef Dest As Variant, ByRef Src() As Byte) Public Declare Sub EncodeWithEOL Lib "Base64" (ByRef Dest() As Byte, ByRef Src() As Byte) Public Declare Sub EncodeToVBStringWithEOL Lib "Base64" (ByRef Dest As Any, ByRef Src() As Byte) Public Declare Sub EncodeToVaraintWithEOL Lib "Base64" (ByRef Dest As Variant, ByRef Src() As Byte) Public Declare Sub Decode Lib "Base64" (ByRef Dest() As Byte, ByRef Src() As Byte) Public Declare Sub DecodeEx Lib "Base64" (ByRef Dest() As Byte, ByRef Src() As Byte) Public Declare Sub DecodeFromVBString Lib "Base64" (ByRef Dest() As Byte, ByRef Src As String) Public Declare Sub DecodeFromVBStringEx Lib "Base64" (ByRef Dest() As Byte, ByRef Src As String)

2010-10-17

Dell Latitude D630 BIOS A17(SLIC 2.1,支持Windows7)

Dell Latitude D630 的BIOS更新程序,通过修改官方的A17版本由SLIC2.0更新为SLIC2.1,安装之后,Dell OEM版本Windows7可以顺利激活。

2010-10-10

Indy10_Tiburon(SVN:4445) for C++Builder2007&C++Builder2010

参考贴子:http://topic.csdn.net/u/20100929/14/11329986-0714-488e-9a30-e6d3b60bd5bd.html

2010-10-10

为Windows平台浏览器注册自己的协议+跨进程参数传递

详细请参考http://topic.csdn.net/u/20090413/17/95324fd2-c830-44f3-af6f-7c98441eb641.html?seed=463571679

2009-04-14

MDAC Utility: Component Checker

来源:http://www.microsoft.com/downloads/details.aspx?FamilyID=8f0a8df6-4a21-4b43-bf53-14332ef092c9&displaylang=en&Hash=c5tFzN%2blL6R9cdiiknOWzEnHnOeoIpQWyS7Hi0KXFp3KbUl1tOlnlA9fMDaCtI3T32mggAqU533lZ7fzHKzvIw%3d%3d

2009-02-04

Delphi2009/C++Builder2009 Updates(SP1+SP2)

Codegear RAD Studio 2009 更新包

2008-12-22

Register COM DLL(注册DLL的API组件)

Delphi源代码,内附VB6动态注册DLL的DEMO

2008-12-21

SFTP Demo for Delphi

SFTP/SSH Demo for Delphi.

2008-12-11

Delphi6&2007&2009(Demo&Source)

Delphi6 Demo Delphi6 Source Delphi2007 Demo Delphi2007 Source Delphi2009 Demo Delphi2009 Source

2008-12-10

DCOM-Based Sharing Object between processes Demo In Delphi

Delphi版基于DCOM的进程间对象(内存)共享示例,希望对需要的朋友有所帮助。 测试办法: 1.先执行:注册.bat; 2.启动两个或多个SharedObject_Test.exe进程; 3.在某一个画面当中的Name输入一个名字,并设置Value,然后按下SetValue; 4.在其它进程当中输入同样的Name,然后按下GetValue 如果是用户(客户进程)量大,会导致启动多个服务进程的话,那么建议把服务进程配置是“交互式用户”,具体的操作,运行DCOMCNFG.exe,然后展开到DCOM,找出相应的DCOM组件(本例为:CoShareObject Object),然后右键,在弹出的菜单当中选择[属性],转到[标识]页,把运行该程序的用户配置为“交互式用户”(默认为“启动用户”) 单元补充: unit UnitManagedObject; interface uses Windows ; type TManagedObject = class(TObject) {Management Properties} private FManagementCount : Integer; //对象引用计数 public {structor} constructor Create; public {Management} procedure Free; function Attach:TManagedObject; function Detach: Integer; end; implementation {TManagedBaseObject} {structor} constructor TManagedObject.Create; begin Inherited Create; FManagementCount := 1; end; {Management} function TManagedObject.Attach : TManagedObject; begin Result := Nil; if InterlockedIncrement(FManagementCount) = 1 then begin InterlockedDecrement(FManagementCount); Exit; end; Result := self; end; function TManagedObject.Detach : Integer; begin Result := InterlockedDecrement(FManagementCount); end; procedure TManagedObject.Free; begin if Detach>0 then Exit; Inherited; end; end.

2008-11-30

[Doc] using ADO with Oracle In Delphi

using ADO with Oracle In Delphi MSWord Document

2008-11-28

CodeGear RAD 2007&2009 Runtime Library

CodeGear Rad 2007 and 2009 Runtime Library rtl120.bpl,vcl120.bpl,rtl100.bpl,vcl100.bpl

2008-11-18

制作资源DLL的示例

资源DLL示例,使用Microsoft Resource Compiler,较好的支持Unicode.

2008-11-17

BCB6Update4

Borland C++ Builder 6 Enterprise English Update4.

2008-11-06

Microsoft Make CAB Tools

Microsoft Make CAB Tools

2008-11-05

GBK与BIG5的转换工具DLL

一个通过查表方式完成转换的DLL,支持COM和API两种方式调用.内附Delphi和VB的Demo.

2008-11-05

RAD 2009 VCL Source

Delphi 2009 VCL Source,希望对某些朋友有所用处。

2008-10-28

Windows快捷方式文件的格式说明(英文版,PDF)

Windows快捷方式文件的格式说明(英文版) 希望对大家有用. (PS:据说现在可用分可以更换资源积分,就黑一点吧,哈哈)

2008-10-28

IOCP完成端口代码(C++Builder)

以前刚学习IOCP的时候用C++Builder写的代码,基本除了一些property之类的是C++Builder特有的以外,稍做修改也可以用到其它C++编译器上. 起始使用C++Builder6写的,后来有使用C++Builder2006及C++Builder2007重新编译过,所以基本这三个版本都可以很好地支持.其中代码几乎完全使用的API+vector. 仅供学习参考.

2008-10-28

基本Zlib的压缩/解压缩组件(同时支持API接口和COM接口

为方便VB应用的开发,特开发此组件.可以支持几乎所有VB当中的原生类型的压缩(需要通过Variant). 简单实例: Dim str As String Dim packed_bytes As Variant Dim unpacked_bytes As Variant str = "随便测试一个相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长的字符串" '压缩 packed_bytes = str 'StrConv(str, vbFromUnicode) MsgBox "压缩前字节数:" & LenB(packed_bytes) Call PackStream(packed_bytes) MsgBox "压缩后字节数:" & (UBound(packed_bytes) - LBound(packed_bytes) + 1) '解压缩 unpacked_bytes = packed_bytes MsgBox "解压缩前字节数:" & (UBound(unpacked_bytes) - LBound(unpacked_bytes) + 1) Call UnPackStream(unpacked_bytes) MsgBox "解压缩后字节数:" & LenB(unpacked_bytes) str = unpacked_bytes 'StrConv(unpacked_bytes, vbUnicode) MsgBox str

2008-10-23

基于Zlib的压缩/解压缩组件

Dim str As String Dim packed_bytes As Variant Dim unpacked_bytes As Variant str = &quot;随便测试一个相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长相当长的字符串&quot; '压缩 packed_bytes = StrConv(str, vbFromUnicode) MsgBox &quot;压缩前字节数:&quot; &amp; LenB(packed_bytes) Call PackStream(packed

2008-10-21

OverByte.ICS.WSocket.V6.RC1(SSL Enabled)

Overbyte 发布的Ics套件V6 Release Candidate 1版本,加入了SSL(OpenSSL)支持.

2008-08-27

Indy10.2.3.BCB2007

Last update 2008-07-23<br>2008-08-22,从http://indy.fulgan.com/ZIP/indy10.zip<br>下载,并增加C++Builder的Package.<br>安装时,只需要打开根目录下的Indy10.2.3_cb2007.groupproj(Delphi:Indy10.2.3_d2007.groupproj),<br>然后到菜单View下选择Project Manager(热键Ctrl+Alt+F11)<br>然后在Project Manager当中,对各bpl按顺序<br>IndySystem110.bpl,选中,右击,然后选择Build(在弹出的菜单当中按B键)<br>IndyCore110.bpl,选中,右击,然后选择Build(在弹出的菜单当中按B键)<br>dclIndyCore110.bpl,选中,右击,然后选择Install(在弹出的菜单当中按I键)<br>IndyProtocols110.bpl,选中,右击,然后选择Build(在弹出的菜单当中按B键)<br>dclIndyProtocols110.bpl,选中,右击,然后选择Install(在弹出的菜单当中按I键)<br><br>选择菜单Tools->Options...<br>Environment Options->C++ Options->Paths and Directories下面设置Include Path和Library Path.

2008-08-23

Delphi使用ADO连接池(存储过程示例)

一个使用ADO连接池的示例,演示了TADOStoredProc动态参数的使用,带重连机制 =================== unit UnitDemo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; //数据库服务器 gDBServer: String = '127.0.0.1'; //数据库名称 gDBName: String = 'master'; //数据库用户名 gDBUser: String = 'sa'; //密码 gDBPass: String = '2001'; implementation {$R *.dfm} uses ADODB, UnitADOConnectionPool; const CreateSQL = 'create procedure TestMyPool (@type sysname) '#13#10+ 'as'#13#10+ 'select * from sysobjects where xtype=@type'#13#10+ 'return @@rowcount'; DeleteSQL = 'if Exists(select 1 from sysobjects where xtype=N''P'' and name=N''TestMyPool'')'#13#10+ ' drop procedure TestMyPool'; var gPoolMan: TADOConnPoolMan = Nil; procedure TForm2.Button1Click(Sender: TObject); var ADOObject:TADOConnPoolObject; ADOStoredProc:TADOStoredProc; Running :Integer; I: Integer; begin //取得一个存储过程资源(含一数据库有效连接) ADOObject := gPoolMan.CreateSP('TestMyPool'); if ADOObject = Nil then //取得资源失败 Exit; try ADOStoredProc := ADOObject.ExecObject as TADOStoredProc; Running := 2;//允许重试(两次)操作,以便在操作失败之后达到重连 while Running>0 do begin Dec(Running); if ADOObject.NeedRefresh then begin//判断是否有重连标志(比如数据库断开等,可能需要进行重连) if Not ADOObject.Reconnect then Exit; ADOObject.NeedRefresh := Not ADOStoredProc.Parameters.Refresh; if ADOObject.NeedRefresh then Exit; end; for I := 1(*Zero is the *Result* Parameter*) to ADOStoredProc.Parameters.Count - 1 do begin //========================= //传递参数 ADOStoredProc.Parameters.Items[I].Value := 'U'; //========================= end; if Running 0 then try //执行存储过程 ADOStoredProc.Open; //执行存储过程成功,退出循环进入后续的数据处理 break; except On E:Exception do begin //执行失败非程序级的异常通常有两种可能: //1.数据库连接断开 //2.自适合的参数传递当中可能存储过程已更新,参与不一致 //设置重连标志 ADOObject.NeedRefresh := True; //=================== //这里记录数据库操作失败日志 //=================== end; end; Exit; end; //========================== //从ADOStoredProc当中读取记录 ShowMessage(IntToStr(ADOStoredProc.Parameters.ParamByName('Result').Value)); //========================== //关闭存储对象的资源 ADOStoredProc.Close; finally //调用结束,释放资源 ADOObject.Free; end; end; procedure TForm2.FormCreate(Sender: TObject); var ADOConn:TADOConnection; begin (****************BEGIN*******************) (*注:仅为测试准备 *) //初始化测试环境 ADOConn := Nil; if Not TADOConnPoolMan.ConnectADO( gDBServer,gDBUser,gDBPass,gDBName,true,ADOConn) then Exit; try ADOConn.Execute(DeleteSQL); ADOConn.Execute(CreateSQL); finally try ADOConn.Close; except end; ADOConn.Free; end; (*****************END********************) //初始化连接池 gPoolMan := TADOConnPoolMan.Create(gDBServer,gDBUser,gDBPass,gDBName,true); end; procedure TForm2.FormDestroy(Sender: TObject); var ADOConn:TADOConnection; begin //释放连接池 if Assigned(gPoolMan) then gPoolMan.Free; (****************BEGIN*******************) (*注:仅为测试准备 *) //清理测试环境 ADOConn := Nil; if Not TADOConnPoolMan.ConnectADO( gDBServer,gDBUser,gDBPass,gDBName,true,ADOConn) then Exit; try ADOConn.Execute(DeleteSQL); finally try ADOConn.Close; except end; ADOConn.Free; end; (*****************END********************) end; end.

2008-03-26

线程安全日志记录器

(******************************************************************************)<br>(* 模 块 名: HSLogger4D.Pas *)<br>(* 别 名: 多任务线程安全日志接口-进程独立版 *)<br>(* 作 者: Unsigned(僵哥) *)<br>(* 说 明: 基于线程安全和文件缓存的单例多线程同步日志记录接口,本接口由一个 *)<br>(* Delphi版本的动态链接库来提供相应的功能,采用Delphi的 String 类型 *)<br>(* 传递参数,使用时请注意调用方式与Delphi一致,不建议使用于 Delphi *)<br>(* 以外的语言环境,由此所引发的后果,作者不承担任何责任 *)<br>(* 附带文件: HSLogger4D.DLL *)<br>(* 版 本 号: 1.1 *)<br>(* 创 建 于: 2007-07 *)<br>(* 备 注: 本接口属进程独立版不处理多进程间同步 *)<br>(* *)<br>(* 修改记录: 2007-07-13 创建最初版本 *)<br>(* 2007-07-14 修正多线程内存管理冲突 *)<br>(******************************************************************************)<br><br>unit HSLogger4D;<br><br>interface<br>uses<br> Windows;<br>(*********************************)<br>(* 功 能:记录日志 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:日志内容,自行控制换行符 *)<br>(* 参数3:记录日志后是否关闭文件 *)<br>(* (不会释放其它资源) *)<br>(* 返回值:0=成功,非0=LastError *)<br>(*********************************)<br>function WriteLogThreadsafe(<br> FileName : String;<br> LogString : String;<br> CloseFileAfterWrote : BOOL<br> ) : DWORD;overload;<br><br>function WriteLogThreadsafe(<br> FileName : String;<br> LogString : String<br> ) : DWORD;overload;<br>(*********************************)<br>(* 功 能:关闭日志文件 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:记录日志文件关闭后是否 *)<br>(* 释放其它相关资源 *)<br>(*********************************)<br>procedure CloseFile(<br> FileName : String;<br> FreeAfterClose : BOOL = true<br> );<br><br>(*********************************)<br>(* 功 能:关闭所有日志文件 *)<br>(* 参数1:记录日志文件关闭后是否 *)<br>(* 释放其它相关资源 *)<br>(*********************************)<br>procedure CloseAllFile(<br> FreeAfterClose : BOOL = false<br> );<br><br>(*********************************)<br>(* 功 能:强制缓存写入文件 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:写入文件后是否关闭文件 *)<br>(* (不会释放其它资源) *)<br>(* 返回值:0=失败,非0=成功 *)<br>(*********************************)<br>function FlushFileToDisk(<br> FileName : String;<br> CloseFileAfterFlush : BOOL = true<br> ) : BOOL;<br><br>(*********************************)<br>(* 功 能:强制缓存写入文件 *)<br>(* 参数1:写入文件后是否关闭文件 *)<br>(* (不会释放其它资源) *)<br>(*********************************)<br>procedure FlushAllFileToDisk(<br> CloseFileAfterFlush : BOOL = false<br> );<br><br>var<br> CloseFileAfterWrote:BOOL=false;<br><br>implementation<br><br>(******************************************************************************)<br>(* *)<br>(* <<日志接口定义>> *)<br>(* 注:请保持与源接口一致 *)<br>(******************************************************************************)<br>type<br> (*Logger Interface*)<br> ILogger=interface<br> ['{E43E419D-26AD-48e6-8097-19622CC2043E}']<br> function WriteLog(<br> FileName : String;<br> LogString : String;<br> CloseFileAfterWrote : BOOL = true<br> ) : DWORD;<br><br> procedure CloseFile(<br> FileName : String;<br> FreeAfterClose : BOOL = true<br> );<br><br> procedure CloseAllFile(<br> FreeAfterClose : BOOL = true<br> );<br><br> function FlushFileToDisk(<br> FileName : String;<br> CloseFileAfterFlush : BOOL = true<br> ) : BOOL;<br><br> procedure FlushAllFileToDisk(<br> CloseFileAfterFlush : BOOL = true<br> );<br> end;<br><br> (*Logger Import statement*)<br> function HSLoggerObject: ILogger; stdcall;<br> external 'HSLogger4D.dll'<br> name 'HSLoggerObject';<br><br>(*Write Log-String to file*)<br>(*********************************)<br>(* 功 能:记录日志 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:日志内容,自行控制换行符 *)<br>(* 参数3:记录日志后是否关闭文件 *)<br>(* (不会释放其它资源) *)<br>(*********************************)<br>function WriteLogThreadsafe(<br> FileName : String;<br> LogString : String;<br> CloseFileAfterWrote : BOOL<br> ) : DWORD;<br>begin<br> Result:=HSLoggerObject.WriteLog(<br> FileName,<br> LogString,<br> CloseFileAfterWrote<br> );<br>end;<br><br>function WriteLogThreadsafe(<br> FileName : String;<br> LogString : String<br> ) : DWORD;<br>begin<br> Result:=WriteLogThreadsafe(<br> FileName,<br> LogString,<br> CloseFileAfterWrote<br> );<br>end;<br><br>(*Close one Logfile,and free logfile-Object if FreeAfterClose was set to TRUE*)<br>(*********************************)<br>(* 功 能:关闭日志文件 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:记录日志文件关闭后是否 *)<br>(*********************************)<br>procedure CloseFile(<br> FileName : String;<br> FreeAfterClose : BOOL);<br>begin<br> HSLoggerObject.CloseFile(<br> FileName,<br> FreeAfterClose<br> );<br>end;<br><br>(*Close All Logfile,and free logfile-Object if FreeAfterClose was set to TRUE*)<br>(*********************************)<br>(* 功 能:关闭所有日志文件 *)<br>(* 参数1:记录日志文件关闭后是否 *)<br>(*********************************)<br>procedure CloseAllFile( FreeAfterClose : BOOL = false );<br>begin<br> HSLoggerObject.CloseAllFile(FreeAfterClose);<br>end;<br><br>(*********************************)<br>(* 功 能:强制缓存写入文件 *)<br>(* 参数1:日志文件名,支持相对路径 *)<br>(* 参数2:写入文件后是否关闭文件 *)<br><br>(* 返回值:0=失败,非0=成功 *)<br>(*********************************)<br>function FlushFileToDisk( FileName : String;<br> CloseFileAfterFlush : BOOL<br> ) : BOOL;<br>begin<br> Result:=HSLoggerObject.FlushFileToDisk(<br> FileName,<br> CloseFileAfterFlush<br> );<br>end;<br><br>(*********************************)<br>(* 功 能:强制缓存写入文件 *)<br>(* 参数1:写入文件后是否关闭文件 *)<br>(*********************************)<br>procedure FlushAllFileToDisk( CloseFileAfterFlush : BOOL );<br>begin<br> HSLoggerObject.FlushAllFileToDisk(CloseFileAfterFlush);<br>end;<br>end.

2008-01-11

BDS2007授权文件

CodeGear RAD Studio 2007 Architect Trial<br>License File

2007-09-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除