Subject RES: [firebird-support] Problems with UDF and Linux
Author Fabrício Fadel Kammer
Hi Martijn

Firstly sorry by the High priority email... it was accidental.

Can you explain a bit more about the strings?
Can't I use string as a internal variable of my function in an udf that
will run in a linux server? Do you think that if I change the string to
pchar I'll resolve my problem?

Thanks again

Fabrício F. Kammer

-----Mensagem original-----
De: firebird-support@yahoogroups.com
[mailto:firebird-support@yahoogroups.com] Em nome de Martijn Tonies
Enviada em: terça-feira, 24 de janeiro de 2006 18:38
Para: firebird-support@yahoogroups.com
Assunto: Re: [firebird-support] Problems with UDF and Linux


Hello Fabrício,

First of all - please do not use "high priority" mail to a
e-mailinglist.
Hundreds of people will get your e-mail and it's not important to
them.

> I did a UDF in Delphi and it's work fine in my Windows servers.
>
> Than I compiled it in kylix with sucsses and put in the directory
> /opt/interbase/UDF/abcs_udf.so on my linux server but I can't do the
UDF
> work.
> Every time that I run a SQL using the UDF in the IBExpert I lose the
> connection with the firebird server.
> If I execute the select using the udf in the isql of my linux server I
> receive the message: "Statement failed, SQLCODE = -902 Error reading
> data from the connection.".

Sounds like the server has crashed.

> Why do it occours? Why does the UDF works fine in the windows server
and
> it doesn't work on linux server?
>
> See the Object Pascal code of my function:
>
> function udf_FormatFloat(var Valor: Double; FormStr: PChar; Pontos:
> PChar): PChar; cdecl; export;
> var
> ResAux: string;
> begin
> ResAux := pchar( FormatFloat( FormStr, Valor ) );

Huh? PChar? ResAux was of type STRING!

> if Pontos = 'N' then
> begin
> ResAux := AnsiReplaceStr( ResAux, '.', '' );
> ResAux := AnsiReplaceStr( ResAux, ',', '' );
> end;
> Result := PChar( ResAux );
> end;

Where is your memory allocated for the result? Items
of type "string" are cleaned up after being used. You have
to allocate space for the resulting string (via ib_alloc or
something) and then copy the contents from the string to
the PChar memory place.


Martijn Tonies
Database Workbench - tool for InterBase, Firebird, MySQL, Oracle & MS
SQL
Server
Upscene Productions
http://www.upscene.com
Database development questions? Check the forum!
http://www.databasedevelopmentforum.com



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Visit http://firebird.sourceforge.net and click the Resources item
on the main (top) menu. Try Knowledgebase and FAQ links !

Also search the knowledgebases at http://www.ibphoenix.com

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




SPONSORED LINKS Technical support Computer technical support Compaq
computer technical support
Compaq technical support Hewlett packard technical support Microsoft
technical support



YAHOO! GROUPS LINKS

Visit your group "firebird-support" on the web.

To unsubscribe from this group, send an email to:
firebird-support-unsubscribe@yahoogroups.com

Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.