AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Rückgabewert aus Firebird UDF
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabewert aus Firebird UDF

Ein Thema von fisherman_b · begonnen am 9. Mär 2010 · letzter Beitrag vom 9. Mär 2010
Antwort Antwort
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, 12: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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Rückgabewert aus Firebird UDF

  Alt 9. Mär 2010, 13:25
Zitat:
Result := ib_util_malloc(l);
Bist Du Dir sicher, dass die 1 richtig ist?

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

[edit2] Laut http://www.firebirdfaq.org/faq83/ muss es cdecl sein (auch wenn das Dein aktuelles Problem nicht behebt). [/edit2]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Rückgabewert aus Firebird UDF

  Alt 9. Mär 2010, 13:51
Rückgabewert vieleicht als PAnsiChar deklarieren.
  Mit Zitat antworten Zitat
fisherman_b

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

Re: Rückgabewert aus Firebird UDF

  Alt 9. Mär 2010, 14:31
Danke Euch beiden für Euren Rat. Blup, das wars... als PAnsiChar funktioniert es. :-D
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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