我正在使用火鸟 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';
仅用于测试。真正的代码在这一行之前。
但不工作。
有人可以建议我吗?
错误在哪里?
此外,当我尝试输入一个参数时,我会收到一个大错误,例如“从连接读取数据时出错”。
Tks
拉兹万
这个函数必须如何假设双参数是数字(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';