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.