Answers

Question and Answer:

  Home  Firebird

⟩ How to write UDF s in Delphi?

It's quite simple, the only thing you need to remember is that you must always use ib_util_malloc() to allocate memory if your UDF returns string result. The UDF must be declared as FREE_IT, so that Firebird releases the memory after it reads the string.

To use ib_util_malloc(), you need to import it from ib_util.dll into your program - and make sure you use it instead of regular memory alocating functions. Here's a simple example of Delphi UDF:

function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

function ChangeMyString(const p: PChar): PChar; cdecl;

var

s: string;

begin

s := DoSomething(string(p));

Result := ib_util_malloc(Length(s) + 1);

StrPCopy(Result, s);

end;

Declaration in Firebird:

DECLARE EXTERNAL FUNCTION ChangeMyString

CString(255)

RETURNS CString(255) FREE_IT

ENTRY_POINT 'ChangeMyString' MODULE_NAME '......'

 130 views

More Questions for you: