[UDF系列之四]:传递和返回数据到一个Delphi编写的UDF Warton译 作者: 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

|