Announcement

Collapse
No announcement yet.

UDFs unter Linux

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • UDFs unter Linux

    Hallo Entwickler!<p>Kann man eigentlich auch UDFs mit dem Interbase 6(.01) für Linux verwenden? Wenn ja laufen, die Windows UDFs auch unter dem Linux-Server? Was gibt es für Unterschiede?<p>Gruss Andreas

  • #2
    Die UDF muss in einem Format geschrieben sein, das Linux verträht, es kann keine Windows DLL sein, sondern muß eine Linux Shared Library sein.

    Mögliche Werkzeuge u.a. gcc, freepascal, kylix

    Comment


    • #3
      Danke für die Antwort. Gibt es How-to's oder Manuals dazu? Wo erfahre ich etwas über den Aufbau?<p>Gruss Andrea

      Comment


      • #4
        Hi,
        <br>
        das folgende Buch kann ich nur "wärmstens" empfehlen:
        <br>http://entwickler.com/buecher/67/teaser.html
        <br>(Andreas Kosch
        <br>InterBase Datenbankentwicklung mit Delphi)
        <br>
        <br>Behandelt Delphi und Interbase 6 und unter anderem auch UDF in Delphi.
        <br>
        <br>Das folgende Bsp. habe ich mit Hilfe des Buches erstellt und erfolgreich mittels Kylix 2 Open Edition kompiliert und im IB eingebaut/getestet.
        <br>
        <br>Das Kylix projekt muß ein "SO" Projekt sein (siehe Karteikarte Neu).
        <br>Die kompilierte Datei wird z.B. so aussehen: libEDC_UDF.so oder EDC_UDF.so
        <br>Den Namen würde ich auf EDC_UDF ändern, den dann gilt für win als auch für Linux Interbase Server folgendes SQL-Statemant:
        <br>
        <pre>
        DECLARE EXTERNAL FUNCTION ROUND
        DOUBLE PRECISION, INTEGER
        RETURNS DOUBLE PRECISION BY VALUE
        ENTRY_POINT 'ECS_UDF_ROUND' MODULE_NAME 'ECS_UDF';
        </pre>

        <br><b>ECS_UDF.dpr</b>
        <pre>
        library ECS_UDF;

        { Wichtiger Hinweis zur Exception-Behandlung bei mehreren,
        binären Modulen (EXE und gemeinsam genutzte Objekte):

        Alle Projekte müssen mit derselben Version des
        Laufzeit-Packages zur Exception-Behandlung baseclx compiliert werden.
        Falls dies nicht beachtet wird, könnten in einem Modul ausgelöste Exceptions
        unbeabsichtigte Auswirkungen in anderen Modulen haben. }
        {%File '../ECS_UDF.SQL'}

        uses
        SysUtils,
        Classes,
        ECS_UDFU in 'ECS_UDFU.pas';

        {$SOPREFIX ''}

        exports
        ECS_UDF_ROUND resident;

        begin
        IsMultiThread := True;
        end.
        </pre>

        <br><b>ECS_UDFU.pas</b>
        <pre>
        unit ECS_UDFU;

        interface

        function ECS_UDF_ROUND(var x : Double; var y: Integer): Double; cdecl;

        implementation

        uses SysUtils, Math;

        {------------------------------------------------------------}
        { DLL-Schnittstellen-Routinen }
        {------------------------------------------------------------}

        function ECS_UDF_ROUND(var x : Double; var y: Integer): Double; cdecl;
        Var
        e : Double;
        begin
        try
        e := IntPower(10,y);
        Result := Round(x * e) / e;
        except
        Result := -1
        end;
        end;

        initialization
        IsMultiThread := True;
        end.
        </pre>
        <br>
        <br>die Datei ECS_UDF muß in das Verzeichnis
        /opt/interbase/UDF kopiert werden
        <br>
        <br>Mit dem Interbase werden Beispiele für DBZugriff und UDF ausgeliefert. Code ist in C++. /opt/interbase/examples
        Habe diese zwar noch nicht getestet, aber ich denke das wird wohl auch funktionieren. Eins ist sicher: Die in C++ entwickelte libarie sollte wesentlich kleiner sein als die von Kylix.
        <br>
        <br>mfg
        <br>P

        Comment

        Working...
        X