[firebase-br] UDF's

Euler Jr. euler em siginformatica.com.br
Qui Set 22 17:28:42 -03 2005


É recomendável que vc gerencie todos seus ponteiros dinâmicamente 
(alocação dinâmica). Como suas funções operam sobre ponteiros utilize as 
funções de alocação disponível no Delphi (New, StrAlloc, etc).
Obviamente efetuando a "coleta de lixo" depois.


[]s
Euler Jr.

Marcos Thomaz (Prog_CPD) escreveu:
> Pessoal, aproveitando os códigos de algumas UDF's já existentes, fiz uma UDF
> assim:
> 
> //Arquivo uTiposAuxiliares
> type
>   TDateRec = record
>     Year: SmallInt;
>     Month: SmallInt;
>     Day: SmallInt;
>   end;
> 
>   TTimeRec = record
>     Hour: SmallInt;
>     Minute: SmallInt;
>     Second: SmallInt;
>   end;
> 
>   TTSRec = record
>     Date: TDateRec;
>     Time: TTimeRec;
>   end;
> 
>   TFBDate = integer;
>   TFBTime = Cardinal;
> 
>   { FireBird TimeStamp record }
>   TFBTS = packed record
>     Date: TFBDate;
>     Time: TFBTime;
>   end;
> 
>   PFBTS = ^TFBTS;
> 
>   function DateRec(const Year, Month, Day: SmallInt): TDateRec;
>   function FBDecDate(T: TFBDate): TDateRec;
> 
> implementation
> 
> function DateRec(const Year, Month, Day: SmallInt): TDateRec;
> begin
>   Result.Year := Year;
>   Result.Month := Month;
>   Result.Day := Day;
> end;
> 
> function FBDecDate(T: TFBDate): TDateRec;
> var
>   Century, Y, M, D: integer;
> begin
>   T := T - (1721119 - 2400001);
>   Century := (4 * T - 1) div 146097;
>   T := 4 * T - 1 - 146097 * Century;
>   D := T div 4;
>   T := (4 * D + 3) div 1461;
>   D := 4 * D + 3 - 1461 * T;
>   D := (D + 4) div 4;
>   M := (5 * D - 3) div 153;
>   D := 5 * D - 3 - 153 * M;
>   D := (D + 5) div 5;
>   Y := 100 * Century + T;
> 
>   if M < 10 then
>     M := M + 3
>   else begin
>     M := M - 9;
>     Y := Y + 1;
>   end;
> 
>   Result.Year := Y;
>   Result.Month := M;
>   Result.Day := D;
> end;
> 
> 
> //Código fonte da DLL
> library MyFBUDF;
> 
> uses
>   SysUtils,
>   Classes,
>   Math,
>   uTiposAuxiliares in 'uTiposAuxiliares.pas';
> 
> {$R *.res}
> 
> function UDF_ANOMESS(ret:PChar;T: PFBTS)cdecl; export;
> var
>   MesI,AnoI:SmallInt;
>   MesS,AnoS:String;
> begin
>   MesI := FBDecDate(T^.Date).Month;
>   AnoI := FBDecDate(T^.Date).Year;
>   MesS := IntToStr(MesI);
>   if MesI < 10 then
>     MesS := '0'+MesS;
>   AnoS := IntToStr(AnoI);
>   StrPCopy( Ret , AnoS+MesS );
> end;
> 
> exports
>   UDF_ANOMESS;
> begin
> end.
> 
> 
> 
> Ela registra no IBExpert legal, mas quando vou usá-la, ela dá um erro louco,
> me retornando a grid em branco, e em seguida, simplesmente trava o IBExpert.
> O que tem de errado??
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 






Mais detalhes sobre a lista de discussão lista