Criar UDFs - ajuda

Firebird

20/04/2012

Olá a todos,

Estou criando uma dll com funcoes para usar no firebird (UDF).

Estou utilizando o c# dot.net para criar a dll.

Dll: UDFFireBird.dll

Segue abaixo:

using System;
using System.Collections.Generic;
using System.Text;

namespace UDFFireBird
{
public static class FireBird
{
public static string StrZero(int wvar, int wtam)
{
string wtmp = wvar.ToString();
for (int i = 0; i < wtam - wvar.ToString().Length; i++)
{
wtmp = 0 + wtmp;
}
return wtmp;
}

public static string Replicate(string wchar, int wtam)
{
string wtmp = ;
for (int i = 0; i < wtam; i++)
{
wtmp = wtmp + wchar;
}
return wtmp;
}
}
}


DECLARE EXTERNAL FUNCTION StrZero
INTEGER, INTEGER
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT FireBird.StrZero MODULE_NAME UDFFireBird;

DECLARE EXTERNAL FUNCTION Replicate
char(1), INTEGER
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT FireBird.Replicate MODULE_NAME UDFFireBird;

Estou usando assim:

Select Codigo, Descricao || replicate(.,10)
From CadCat

Erro:
Invalid token.
invalid request BLR at offset 75.
function REPLICATE is not defined.
module name or entrypoint could not be found.

O que está errado ?

O MODULE_NAME UDFFireBird ?
O ENTRY_POINT FireBird.Replicate ?

Por favor, alguma ajuda ?
Obrigado
Angelo Zagatti

Angelo Zagatti

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

20/04/2012

creio que o entrypoint deva ser somente o nome da função.

ENTRY_POINT FireBird.Replicate => ENTRY_POINT Replicate
GOSTEI 0
Angelo Zagatti

Angelo Zagatti

20/04/2012

Emerson,

Já tentei assim tambem, mas nao deu certo.
Nao tenho muinta certeza ainda, mas pelo que vi na net, nao é possivel fazer uma dll em c# para usar como UDF no firebird.

Se algum tiver alguma confirmaçao, por favor relatar.

Obrigado
GOSTEI 0
Deivison Melo

Deivison Melo

20/04/2012

Já criei UDF´s usando o Delphi!

existem muitos exemplos na net utilizando o Delphi, veja se há possibilidade de adptar para o C# (nunca soube de alguém que fez dll para utilização de funções externas (UDF) em C# ou até mesmo em C/C++ (Que imagino que no firebird seja mais fácil de encontrar em C/C++).

Forte abraço!!

GOSTEI 0
POSTAR