菜鳥學堂:
[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