[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