文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发DelphiDelphi 6 SOAP 源码中的BUG修正
精品推荐
特别推荐
·利用Delphi编写Socket通信程序
·拦截其它程序的网络数据封包
·Delphi编程根据IP地址得到主机名
·Delphi 程序员代码编写标准指南
·用DELPHI开发自动化服务器
·将日期转化为汉语的形式
·加密ACCESS数据库增加安全性
·使用TCP/IP协议实现聊天程序
·在Delphi中控制扫描仪
热点TOP10
·利用Delphi 5.0开发OLE自动化控制器操纵Excel
·在Delphi中控制扫描仪
·Delphi中DLL的创建和使用(1)
·Delphi接口编程的两大陷阱
·利用Tbatch组件完成数据批处理
·如何Delphi中操纵拨号网络
·实现webbrowser中的打印、复制、全选等编辑功能
·小技巧:如何用Delphi创建快捷方式
·Delphi开发工具中如何访问数据库结构
·Delphi版模仿熊猫烧香病毒核心源码

Delphi 6 SOAP 源码中的BUG修正

日期:2008年5月20日 作者: 查看:[大字体 中字体 小字体]


Delphi 6 SOAP 源码中的BUG修正

最近我正在用delphi 6 做一个关于SOAP的项目,调试程序的时候跟踪源码发现了delphi 6的源码中的一些bug :(

在 delphi/source/soap 目录下面的XSBuiltIns.pas 文件中,第438行如下:

procedure TXSDate.XSToNative(Value: WideString);
var
  TempDate: TDateTime;
begin
  FAdditionalYearDigits := Pos(XMLDateSeparator,Value) - (1 + XMLDefaultYearDigits);
  TempDate := StrToDate(XMLDateToStr(Value, FAdditionalYearDigits));  // 注意这行代码
  DecodeDate(TempDate, FYear, FMonth, FDay);
end;

其中调用了一个xmldatetostr函数,下面是该函数的代码(在xsbuiltins.pas 的241行):

function XMLDateToStr(ADate: WideString; AddDigits: Word = 0): WideString; 
begin
  Result := Copy(ADate, XMLMonthPos + AddDigits, 2) + DateSeparator +
            Copy(ADate, XMLDayPos + AddDigits, 2 ) +
            DateSeparator + Copy(ADate, XMLYearPos, XMLDefaultYearDigits + AddDigits); 
end;

注意, XMLDateToStr返回的日期格式是 MM-DD-YYYY。例如如果传过去的参数Adate = '2001-12-08',则XMLDateToStr('2001-12-08', 0)的结果是'12-08-2001'。XMLDateToStr的第二个参数AddDigits是多余的年代的位数,估计是用来解决千年虫问题的,对于标准的10位日期格式AddDigits始终是0。

现在问题来了,回到xstonative的代码中,这行代码:

TempDate := StrToDate(XMLDateToStr(Value, FAdditionalYearDigits));

以函数xmldatetostr的返回值作为参数调用了strtodate这个函数, 函数StrToDate的作用是将字符串转化为日期,这个函数的参数应该是一个表示日期的字符串,但是日期的字符串格式必须符合当前平台的区域设置,比如我们常用的中文平台的短日期格式一般是 YYYY-MM-DD,而英文平台一般是 MM-DD-YYYY,所以如果在中文的平台上调用strToDate()来格式化一个格式为"MM-DD-YYYY"的字符串就会产生一个日期格式错误异常!!

下面是delphi的帮助中对StrToDate函数的解释的内容:

function StrToDate(const S: string): TDateTime; 
description 
Call StrToDate to parse a string that specifies a date. If S does not contain a valid date, 
StrToDate raises an EConvertError exception.S must consist of two or three numbers, separated by the character
defined by the DateSeparator global variable. 
the order for month, day, and year is determined by the ShortDateFormat global variable--possible 
combinations are m/d/y, d/m/y, and y/m/d.

过程decodedate(tempdate, FYear, FMonth, FDay);的最后一行代码

DecodeDate(TempDate, FYear, FMonth, FDay);

作用是将tempdate重新解析为fyear, FMonth, FDay三个域,其实可以直接从原来的字符串表示的日期中解析出这三个域,所以稍微修改一下就可以解决这个bug。

具体做法是:

[1] [2] [3] 下一页 




上一篇:delphi “for” 循环中循环变量的注意事项

下一篇:Delphi 6 Web Services初步评估

相关文章:
·利用Delphi 5.0开发OLE自动化控制器操纵Excel
·Vista SP1修正复制文件时间过长问题
·Vista是Firefox的恶梦 尚有20个缺陷没修正
·在Delphi中控制扫描仪
·Delphi中DLL的创建和使用(1)
·Delphi接口编程的两大陷阱
·如何Delphi中操纵拨号网络
·[仙术]天仙加点篇修正版本
·[仙术]关于召唤/仙双修的修正
·[圣骑士]骑士vs法师篇修正版
相关软件:
·智圣东方朔全集v2.0(修正版)
·冰风之谷三部曲(修正版)
·DelphiV7.0
·《冰封王座》地图:3C-ORC-AI 1.81测试1修正版
·Delphi高手速成
·仙剑奇侠传三外传问情篇繁体中文版 模拟加禁止光驱方式加破解修正免CD补丁
·夜航船(修正版)
·Delphi7编程技巧与实例精解
·DelphiV7.0
·书法珍本系列]鄭板橋田遊巌傳 (修正)

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot