[ MarkoBalkan @ 10.10.2008. 17:00 ] @
za probu sam napravio u .net dll file.

ime dll file je ClassLibrary1.dll
dll file sadrži klasu moje.
a unutar klase je definirana je funkcija za izračun korijena sa ulaznim parametrom _a as double.

evo coda.


Code:


Public Class moje

    Public a As Double
    Public d As Double

    Public Function Det(ByVal _a As Double) As Double
        a = _a
        d = System.Math.Sqrt(a)
        Return d
    End Function

End Class



kako ovo dodati u firebird da radi.negdje griješim, a ne znam gdje.
evo slika.
[ MarkoBalkan @ 11.10.2008. 15:27 ] @
Code:

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class Math
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static int Add(int x, int y)
    {        
        return x + y;
    }
};


ovo je primjer udf-a za sql server.
šta ubaciti umjesto ovog "[Microsoft.SqlServer.Server.SqlFunction]"

ako ubacim FirebirdSql.Data.Server javlja grešku.

[ savkic @ 12.10.2008. 17:13 ] @
Koliko ja znam u .NET ne možeš napraviti klasične win32 dll fajlove, tako da ni pisanje UDF funkcija u njemu nije moguće. Koje su ti UDF funkcije potrebne a koje već ne postoje? Poznaješ li C++ i Delphi, ima gotovih UDF biblioteka pisanih u njima tako da možeš videti kako se to radi i eventualno neku funkciju iskoristiti za svoje potrebe.
[ MarkoBalkan @ 12.10.2008. 17:34 ] @
kakve veze ima je li klasičan dll ili se veže na .net?


a kako može za sql server?

mozda zato jer je MS-ov?


sumnjam.dll je dll, ma pisan kako god, jel na nekoj platformi ili nije.


nije mi se problem prebaciti na delphi, ali kad sam isprobao primjer, uopće mi nije radio, možda zato što sam koristio lazarus, ne znam?


c++ ne znam, a nit ću ga učiti.
jer kad vidim sintaksu, zbljuje mi se.
[ savkic @ 13.10.2008. 12:34 ] @
.NET je managed okruženje, Firebird to nije i ne podržava managed funkcije, dakle jedini način je pisanje native funkcija i native dlla. A native dll i .NET dll su prilično različite stvari. Free pascal compiler može da pravi native kod tako da bi sa njim mogao napraviti udf.
Možeš downloadovati FreeUDFLib koja je pisana u Delphi i videti kako treba raditi, takođe pročitaj:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_howto6
[ doroz @ 25.03.2009. 13:50 ] @
1.
Code:

DECLARE EXTERNAL FUNCTION DODAJ
    CSTRING(255),
    INTEGER,
    CHAR(1),
    CHAR(1)
    RETURNS CSTRING(255)
    ENTRY_POINT 'Dodaj' MODULE_NAME 'ZFireBirdUDF.dll';


2. Provjeri da li su ti udf-ovi ukljuceni u firebirdu
To pogledas u fajli firebird.conf kajo ti je u folderu di je instaliran firebird

Code:

# ----------------------------
# External Function (UDF) Paths/Directories
#
# UdfAccess may be None, Full or Restrict. If you choose
# Restrict, provide ';'-separated trees list, where UDF libraries
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'Restrict UDF' provides the same restrictions
# as in FB 1.0. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalFunctions',
# for unix - '/db/extern;/mnt/extern').
#
# NOTE: THE EXTERNAL FUNCTION ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL FUNCTION LOCATIONS!
#
# Type: string (special format)
#
UdfAccess = Restrict UDF


4. Kopiraj .dll u folder UDF (u folderu di je instaliran firebird)

I to ti je to
Sve to radis na server di se nalazi baza
Ako ne radio odmah, samo restartaj server.