Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rückgabewert aus Firebird UDF (https://www.delphipraxis.net/148840-rueckgabewert-aus-firebird-udf.html)

fisherman_b 9. Mär 2010 12:41

Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus

Rückgabewert aus Firebird UDF
 
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.

DeddyH 9. Mär 2010 13:25

Re: Rückgabewert aus Firebird UDF
 
Zitat:

Delphi-Quellcode:
Result := ib_util_malloc(l);

Bist Du Dir sicher, dass die 1 richtig ist?

[edit] Sry, das ist wohl ein kleines "L" :oops: [/edit]

[edit2] Laut http://www.firebirdfaq.org/faq83/ muss es cdecl sein (auch wenn das Dein aktuelles Problem nicht behebt). [/edit2]

Blup 9. Mär 2010 13:51

Re: Rückgabewert aus Firebird UDF
 
Rückgabewert vieleicht als PAnsiChar deklarieren.

fisherman_b 9. Mär 2010 14:31

Re: Rückgabewert aus Firebird UDF
 
Danke Euch beiden für Euren Rat. Blup, das wars... als PAnsiChar funktioniert es. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz