Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi NULL als Rückgabe in UDF (https://www.delphipraxis.net/148285-null-als-rueckgabe-udf.html)

borwin 26. Feb 2010 17:25

Datenbank: Firebird • Version: 2.x • Zugriff über: native

NULL als Rückgabe in UDF
 
Hallo,

ich bin gerade beim Schreiben einer udf dll für Firebird 2.x und möchte das sie unter bestimmten Umständen NULL zurück gibt.
Leider habe ich zur Zeit keine Idee wie ich das in Delphi realisieren muss.
Eine udf mit Rückgaben ungleich NULL funktioniert. Hat einer eine Idee oder geht das mit Delphi nicht.

Danke für die Hilfe im voraus

Gruß Borwin

DeddyH 26. Feb 2010 17:30

Re: NULL als Rückgabe in UDF
 
Zitat:

One thing you can't do with UDFs: You can't pass NULLs to them. Likewise, a UDF cannot return a NULL value.
Quelle: http://edn.embarcadero.com/article/27204

mjustin 26. Feb 2010 17:39

Re: NULL als Rückgabe in UDF
 
Hier steht etwas zum Thema:

http://www.firebirdsql.org/manual/nullguide-udfs.html

Rückgabe von NULL wird kurz angesprochen:

Zitat:

If the function result type is a pointer, returning NULL is possible even if receiving NULL isn't.
Habe es aber noch nicht selber versucht :angel:

borwin 26. Feb 2010 17:41

Re: NULL als Rückgabe in UDF
 
Danke für die schnelle Antwort.
Bei Firebird ab 2.0 und nur hier können auch udf's NULL zurückgeben. udf's wie FreeadhocUDF haben das.
Bei Interbase ist das nicht möglich.
Da muss es doch auch mit Delphi eine Möglichkeit geben.

Gruß Borwin

DeddyH 26. Feb 2010 17:47

Re: NULL als Rückgabe in UDF
 
Ja gut, wenn es ein Zeiger ist, müsste man ja dann vermutlich nil zurückgeben.

borwin 26. Feb 2010 20:29

Re: NULL als Rückgabe in UDF
 
So es gibt erste Erfolge zu verzeichnen.
Zitat:

Ja gut, wenn es ein Zeiger ist, müsste man ja dann vermutlich nil zurückgeben.
Bei der Rückgabe von Zeichen mit PChar klappt es.

Result := nil;
zeigt im Ergebnis bei einer Abfrage dann NULL an.

Die UDF muss in Firebird noch folgendermaßen deklariert sein.

SQL-Code:
DECLARE EXTERNAL FUNCTION FUNC_TEST
      CSTRING(1024) NULL
RETURNS CSTRING(254) free_it
ENTRY_POINT 'Func_Test' MODULE_NAME 'funcudf.dll';
Jetzt will ich aber keinen Text zurückgeben sondern einen Zahl (Double) und die soll ggf. auch NULL sein.
Wie mache ich das in Delphi. Mit NIL komme ich da nicht weiter.
Mit Pointer habe keine großen Erfahrungen.

Gruß Hartmuth


Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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