[UDF系列之四]:传递和返回数据到一个Delphi编写的UDFWarton译作者: Chris Levesque, Tina Grubbe, Brett Bandy
--------------------------------------------------------------------------------
[译者叙]:
前面我已经翻译了几篇关于编写UDF的文章,虽然一些朋友可能也从中得到了一点帮助,但是可能对UDF的认识还存在一些问题。今天,我再翻译两文章,这两篇文章都是来自MER System (http://www.mers.com)的,有兴趣的朋友可以查看原文。
[论点]: 当动态链接库没有为受保护的数据值做特殊的预防时,我们的UDF带有参数值或返回值的数据结果可能处在一个受保护的异常或错误结果之中。 [解决方案]: 每一个日期值被保存在两个32位的整数类型之中:一个表示日期的signed integer,和一个表示时间的unsigned integer。使用Delphi代码来定义这个结构(ISC_QUAD)和结构的指针(PISC_QUAD):type {InterBase Date/Time Record} ISC_QUAD = record isc_quad_high : Integer ; // Date isc_quad_low : Cardinal ; // Time end; PISC_QUAD = ^ISC_QUAD; 为了保护返回值,在函数定义的外部申明一个线程安全的ISC_QUAD变量,使它保存返回值(如果返回值是一个日期型的数据)。threadvar tempquad : ISC_QUAD;然后编写你的函数以便结果指向线程变量。 // 定义函数// This function adds a number of days to an existing date. function DayAdd( var Days: Integer; IBDate PISC_QUAD) : PISC_QUAD; cdecl; export; begin tempquad.isc_quad_high := IBDate^.isc_quad_high + Days; tempquad.isc_quad_low := IBDate^.isc_quad_low; Result := @tempquad; end; 本主来自:MER Systems Inc.. http://www.mers.com
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18