[firebase-br] UDF - Problemas]

Pha lista em pha.com.br
Qua Set 13 15:04:10 -03 2006


Para trabalhar com strigs, a coisa complica um pouco, elas devem ser
passadas como PCHAR, e para alocar memoria voce pode utilizar 3 formas.

1) Declarar a funçao no IB/FB FREE_IT e usar a função
 function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

2) Usar um vetor como alocação dinamica e mult thread , acho que é isso.

3) Usar o proprio parametro passado pelo IB/FB para armazenar o retorno,
eu utilizo este processo, só que o mesmo não é documentado.

Baixe alguma biblioteca free na firebase e estude as mesma.

Exemplos da minha UDF em Delphi:

function F_StrLen(sz: PChar): Integer; cdecl; export;
function F_LTrim(sz: PChar): PChar; cdecl; export;

{
  Retorna o tamanho da string passada
}
function F_StrLen(sz: PChar): Integer;
begin
  if sz = nil then Result := 0 else Result := StrLen(sz);
end;

{
  Retorna a string sem os espaços iniciais
}
function F_LTrim(sz: PChar): PChar;
begin
  try
    Result := sz;
    if sz = nil then Exit;

    if StrLen(Result) > 0 then begin
      while (Result[0] <> #0) and (Ord(Result[0]) <= Ord(' ')) do
        Inc(Result);
    end
  except
    Result := nil;
  end;
end;

Paulo Henrique Albanez
VirtualSystem Informática Ltda
Nova Odessa / SP - Brazil
Membro do TeamFB (FireBase)

> PHA... no VB é assim: ByRef
>   eu gostaria de testar a udf desta maneita
>
>   public function F_RetornaString(ByRef Texto as String) as String
>               F_RetornaString = Texto
>   end function
>
>   Algo simples assim... para começar...
>
>   Já havia usado desta maneira e não funcionou...
>
>   Outra dica???
>
>   Danilo
>
> Pha <lista em pha.com.br> escreveu:
>   Os parametros da funcao tem que ser declarados com var
>
> No Delphi seria assim, já no VB eu não sei.
>
> function F_Inc(var iValue, iInc: Integer): Integer; cdecl; export;
>
>
> Paulo Henrique Albanez
> VirtualSystem Informática Ltda
> Nova Odessa / SP - Brazil
> Membro do TeamFB (FireBase)
>
>> Pessoal, bom dia.
>>
>> Criei uma DLL em Visual Basic 6 com apenas duas funções, e criando uma
>> UDF para fazer apenas alguns testes e estou tendo os seguintes
>> problemas:
>>
>> 1 - Uma Função dela recebe 2 parametros inteiros e retorna a soma deles.
>> A declaração da função é a seguinte:
>>
>> DECLARE EXTERNAL FUNCTION F_SOMA
>> INTEGER,
>> INTEGER
>> RETURNS INTEGER BY VALUE
>> ENTRY_POINT 'Soma' MODULE_NAME 'DLL_Exemplo'
>>
>> E estou usando-a assim: select f_soma(1,2) from rdb$Database. só que o
>> valor que ela retorna é: 29748744
>>
>> 2 - A outra função recebe um parametro String e retorna este mesmo
>> parametro. A declaração:
>>
>> DECLARE EXTERNAL FUNCTION F_RETORNASTRING
>> CSTRING(255)
>> RETURNS CSTRING(255) FREE_IT
>> ENTRY_POINT 'RetornaString' MODULE_NAME 'DLL_Exemplo'
>>
>> Só que ao executar o select: select f_retornastring('String a
>> Retornar') from rdb$Database, estou perdendo a conexão com o Banco,
>> recebendo a seguinte mensagem do IBExpert:
>>
>> Connection was lost to database:
>>
>> O que pode estar acontecendo de errado...
>> Obrigado,
>> Danilo







Mais detalhes sobre a lista de discussão lista