Academia de Novatos:
[UDF Série 4]: Passando e retornando dados para uma UDF escrita em Delphi
traduzido por warton
Autor: Chris Levesque, Tina Grubbe, Brett Bandy
-------------------------------------------------- ----------------------------------
[Declaração do tradutor]:
Já traduzi vários artigos sobre como escrever UDF. Embora alguns amigos possam ter recebido uma ajudinha deles, eles podem não estar familiarizados com UDF.
Ainda existem alguns problemas de compreensão. Hoje irei traduzir mais dois artigos, ambos do sistema mer (http://www.mers.com)
Sim, amigos interessados podem visualizar o texto original.
[argumento]:
Quando a biblioteca de vínculo dinâmico não toma precauções especiais para valores de dados protegidos, nossa UDF possui resultados de dados com valores de parâmetro ou valores de retorno.
Pode estar em uma exceção protegida ou resultado de erro.
[Solução]:
Cada valor de data é armazenado em dois tipos inteiros de 32 bits: um inteiro assinado representando a data e um inteiro com sinal que representa a data.
Um número inteiro não assinado de tempo. Use o código delphi para definir esta estrutura (isc_quad) e o ponteiro para a estrutura (pisc_quad):
tipo
{registro de data/hora interbase}
isc_quad = registro
isc_quad_high : inteiro; // data
isc_quad_low: cardinal; // hora
fim;
pisc_quad = ^isc_quad;
Para proteger o valor de retorno, declare uma variável isc_quad thread-safe fora da definição da função para que ela retenha o valor de retorno (se o valor de retorno
é um dado do tipo data).
thread var
tempquad : isc_quad;
Em seguida, escreva sua função para que o resultado aponte para a variável thread.
//define a função
// esta função adiciona um número de dias a uma data existente.
função dayadd( var dias: inteiro; ibdate pisc_quad): pisc_quad exportação;
começar
tempquad.isc_quad_high := ibdate^.isc_quad_high + dias;
tempquad.isc_quad_low := ibdate^.isc_quad_low;
resultado := @tempquad;
fim;
O autor vem de: mer Systems Inc.. http://www.mers.com