Rookie-Akademie:
[UDF-Serie 4]: Übergabe und Rückgabe von Daten an eine in Delphi geschriebene UDF
übersetzt von Warton
Autor: Chris Levesque, Tina Grubbe, Brett Bandy
-------------------------------------------------- ----------------------------------
[Aussage des Übersetzers]:
Ich habe bereits mehrere Artikel über das Schreiben von UDF übersetzt. Obwohl einige Freunde möglicherweise ein wenig Hilfe von ihnen erhalten haben, sind sie möglicherweise nicht mit UDF vertraut.
Es gibt noch einige Verständnisprobleme. Heute werde ich zwei weitere Artikel übersetzen, die beide von mer system (http://www.mers.com) stammen.
Ja, interessierte Freunde können den Originaltext einsehen.
[Argument]:
Wenn die Dynamic Link Library keine besonderen Vorkehrungen für geschützte Datenwerte trifft, verfügt unsere UDF über Datenergebnisse mit Parameterwerten oder Rückgabewerten.
Möglicherweise handelt es sich um eine geschützte Ausnahme oder um ein Fehlerergebnis.
[Lösung]:
Jeder Datumswert wird in zwei 32-Bit-Ganzzahltypen gespeichert: einer vorzeichenbehafteten Ganzzahl, die das Datum darstellt, und einer
Eine vorzeichenlose Ganzzahl der Zeit. Verwenden Sie Delphi-Code, um diese Struktur (isc_quad) und den Zeiger auf die Struktur (pisc_quad) zu definieren:
Typ
{Interbase-Datums-/Uhrzeitdatensatz}
isc_quad = Datensatz
isc_quad_high: Ganzzahl; // Datum
isc_quad_low: Kardinal; // Zeit
Ende;
pisc_quad = ^isc_quad;
Um den Rückgabewert zu schützen, deklarieren Sie eine threadsichere isc_quad-Variable außerhalb der Funktionsdefinition, damit sie den Rückgabewert enthält (falls der Rückgabewert
ist ein Datumstyp.
Threadvar
tempquad : isc_quad;
Schreiben Sie dann Ihre Funktion so, dass das Ergebnis auf die Thread-Variable zeigt.
//Funktion definieren
// Diese Funktion fügt einem vorhandenen Datum eine Anzahl von Tagen hinzu.
function dayadd( var days: integer; ibdate pisc_quad): pisc_quad;
beginnen
tempquad.isc_quad_high := ibdate^.isc_quad_high + Tage;
tempquad.isc_quad_low := ibdate^.isc_quad_low;
Ergebnis := @tempquad;
Ende;
Der Autor kommt von: mer systems inc. http://www.mers.com