转自:http://topic.csdn.net/t/20020708/15/858595.html我把图形文件(TiF格式)存放在SQl Server数据库中,当时我要在客户端取时速度很慢(3-4秒),我想通过实现IDataIntercept接口,来压缩图像,该怎样实现。 我不知道,不过delphi中有demo的.我想,如果你在客户端用了clientdataset,在服务端用了datasetprovider,那你可以在 datasetprovider的OnGetData事件中,对图像进行压缩,然后在ClientDataSet的AfterGetRecords事件中,对图像进行解压。你的想法不错,我觉得我的系统也可以用这样的方法提高效率,能不能告说我你准备用什么方式对数据进行压缩?也许我们可以继续交流一下?用IDataIntercept的方式也不错,有空我也研究一下。实现IDataIntercept的方法不错. 我做过,但只是用于SocketConnection.它只需要实现两个方法, 1,数据进, 在里面实现解压. 2,数据出, 在里面实现压缩. 理解了就简单,具体代码可以从DEMO改写.. 按下面的步骤,就可以了,不用去写代码,记住,它是内置的功能,只要如下配置即可。 1: 准备工作,先delphi光盘中的\info\extras\zlib\zlib.pas进行编绎,然后copy 到lib路径中,因为要压缩数据,必须要有压缩功能,这个delphi已经自带,它是基于流的方式对接口IDataBlock(TDataBlock实现,其实就是对TMemoryStream的操作)数据进行压缩和解压的。做了这个后,才能进行下面的工作。 2: Open \Demos\Midas\Intrcpt\Intrcpt.dpr complier.... 生成Intrcpt.dll 将Intrcpt.dll copy to System directory,或者你的程序下面。 注册它:regsrvr32 Intrcpt.dll 记住Intrcpt.dpr的那个GUID 3: Server: Open scktsrvr.exe,相信各位都很熟悉那界面,端口(TListbox),Thread Cache Size(TEdit), GUID(TEdit),好,我们要做的事,就是将注册的Intrcpt.dll那个GUID填到这个GUID(TEdit)框框中, 只需填自己程序的的那个端口的GUID啊,记住:是自已使用的那个端口。OK,Apply. Client: 你写的程序中肯定有TSocketConnection,它有个属性InterceptGUID: string;好了,将Intrcpt.dll的GUID填上去,它是跟Server中的一样的。OK.还有别忘了,Regsrvr32 intrcpt.dll 在你的客户端。不然,程序虽不会raise,但是Server传过来的数据是压缩的.... IDataIntercept接口只为TSocketConnection而做,DCOM不支持,只能自已写,在发送和接收的时候

评论