Einzelnen Beitrag anzeigen

fisherman_b

Registriert seit: 4. Mär 2005
Ort: Aachen
21 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Rückgabewert aus Firebird UDF

  Alt 9. Mär 2010, 13:41
Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus
Hallo zusammen,

ich habe entsprechend den Hinweisen, die ich hier ergoogelt habe, eine UDF-Dll in Delphi für eine Firebird 2.1 Datenbank erstellt. Zweck der UDF ist es, zufällige alphanumerische Strings (ohne 0) mit einer festen Länge zu generieren.
Leider bekomme ich es nicht hin, dass der Rückgabewert in Firebird die gewünschte Länge hat - als Ergebnis des Select Statements kommt immer nur ein einziges Zeichen an. Mir ist nach 2 Tagen rumprobieren nicht klar, woran das liegt - wahrscheinlich bin ich mittlerweile schon betriebsblind? (Wenn ich die Funktion aus einer anderen Anwendung heraus aufrufe - ohne Verwendung von ib_util_malloc - funktioniert sie einwandfrei)

Hier der Delphi Code für einen zuälligen alphanumerischen String mit der Länge 2:

Delphi-Quellcode:
function AnGen2: PChar; stdcall;
// habe auch cdecl probiert - ergebnis ist identisch
var
  i: Integer;
  ls: string;
  l: integer;
begin
  i := Random(35) + 1;
  if (i > 9) then
    ls := Chr(i + 55)
  else
    ls := IntToStr(i);

  i := Random(35) + 1;
  if (i > 9) then
    ls := ls + Chr(i + 55)
  else
    ls := ls + IntToStr(i);

  l := Length(ls) + 1 ;
  Result := ib_util_malloc(l);
  StrPCopy(Result, ls);
end;

Deklaration in der DB:

DECLARE EXTERNAL FUNCTION ANGEN_2
RETURNS CSTRING(2) FREE_IT
ENTRY_POINT 'AnGen2' MODULE_NAME 'angen';


Ich wäre für jeden hilfreichen Hinweis sehr dankbar.
  Mit Zitat antworten Zitat