我将使用Firebird 2.5。
我正试图编写一个Delphi XE2 UDF来从一些输入参数返回一些字符串。
以下是Delphi中的函数:
function FormatRasaSingle(var formatRasa : PChar; var aDenumire : PChar; var aCod : PChar; var aSimbol : PChar; var aTulpina : PChar) : PChar;
var tmpString : String;
tmpInteger : Integer;
begin
tmpString := formatRasa;
tmpString := StringReplace(tmpString, '#DENUMIRE', aDenumire, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#COD', aCod, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#SIMBOL', aSimbol, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#TULPINA', aTulpina, [rfReplaceAll, rfIgnoreCase]);
tmpString := 'MAMA';
tmpInteger := Length(tmpString) + 1;
Result := ib_util_malloc(tmpInteger);
StrPCopy(Result, tmpString);
end;
UDF(用户自定义函数)声明如下:
DECLARE EXTERNAL FUNCTION FORMATRASASINGLE
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'FormatRasaSingle' MODULE_NAME 'eliteSoftFirebird';
当我试图测试函数的结果时,只有第一个字母"M"。
这些行
tmpString := 'MAMA';
仅供测试。真正的代码在此行之前。
但是它不起作用。
有谁可以给我建议吗?
哪里出错了?
当我尝试输入一个参数时,会出现一个大错误,如“从连接中读取数据时出错”。
谢谢
Razvan
假设双参数是数字(5,2),则必须如何使用此函数?
function FormatRasaMultiple(const formatRasa, aDenumire, aCod, aSimbol, aTulpina : PAnsiChar; aProcent : Double) : PAnsiChar; cdecl; export;
这个函数与以前的函数完全相同,但多了一个数字参数。
到目前为止(我的旧版UDF Firebird 1.5),我使用的声明是 "var aProcent:Double",但当我返回时它没有值。
这个UDF声明如下:
DECLARE EXTERNAL FUNCTION FORMATRASAMULTIPLE
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
NUMERIC(5, 2)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'FormatRasaMultiple' MODULE_NAME 'eliteSoftFirebird';