<html>
<br>
I use proj from both VC++ and VB. I don't know Delphi very well, but I
have a few suggestions:<br><br>
1. pj_errno is a variable, not a function. Calling it as a function will
cause you to crash with an access violation. <br><br>
2. There is no need to know the contents of PJ*, you should use it simply
as an opaque pointer. Then there is no problem calling PJ_free. 
<br><br>
3. I can't really comment on the stack overflow in the situation you
show. All I can say is that I have not seen this problem myself.
<br><br>
BTW, You don't need definitions of UV and LP for anything.<br><br>
At 04:23 PM 11/07/2002 +0800, bornkilled wrote:<br>
<blockquote type=cite class=cite cite><font face="arial" size=2>hi, I
want to make a delphi API Conversion for&nbsp; proj.dll( I have compile
it by VC6)</font><br>
&nbsp;<br>
<font face="arial" size=2>I wrote pas&nbsp; in this way<br>
unit proj_dll;<br>
&nbsp;<br>
interface<br>
uses<br>
&nbsp; windows;<br>
const<br>
&nbsp; ProjDll='proj.dll';<br>
type<br>
&nbsp; projPJ=Pointer;<br>
&nbsp; XY=record<br>
&nbsp;&nbsp;&nbsp; X:Double;<br>
&nbsp;&nbsp;&nbsp; Y:Double;<br>
&nbsp; end;<br>
&nbsp; UV=XY;<br>
&nbsp; LP=XY;<br>
&nbsp; function pj_init(argc:DWord;argv:PLPSTR):projPJ;stdcall;<br>
&nbsp; function pj_init_plus(definition:PChar):projPJ;stdcall;<br>
&nbsp; procedure pj_free(var P:projPJ);stdcall;<br>
&nbsp; procedure pj_deallocate_grids();stdcall;<br>
&nbsp; function pj_errno():DWORD;stdcall;<br>
&nbsp; function pj_fwd(aLP:LP;P:projPJ):XY;stdcall;<br>
&nbsp; function pj_inv(aXY:LP;P:projPJ):LP;stdcall;<br>
&nbsp; function pj_is_latlong(P:projPJ):DWORD;stdcall;<br>
implementation<br>
&nbsp; function pj_init;external ProjDll Name 'pj_init';<br>
&nbsp; function pj_init_plus;external ProjDll Name 'pj_init_plus';<br>
&nbsp; procedure pj_free;external ProjDll Name 'pj_free';<br>
&nbsp; procedure pj_deallocate_grids();external ProjDll Name
'pj_deallocate_grids';<br>
&nbsp; function pj_errno;external ProjDll Name 'pj_errno';<br>
&nbsp; function pj_fwd;external ProjDll Name 'pj_fwd';<br>
&nbsp; function pj_inv;external ProjDll Name 'pj_inv';<br>
&nbsp; function pj_is_latlong ;external ProjDll Name
'pj_is_latlong';<br>
&nbsp;<br>
But I meet some trouble</font> <font face="arial" size=2>:</font><br>
&nbsp;<br>
<font face="arial" size=2>1:pj_errno make an exception &quot;Access
Violation&quot; in any case;</font><br>
&nbsp;<br>
<font face="arial" size=2>2:I can not find the excatly definition of
PJ*,so i can not use pj_free(),that will cause a memory leak
.</font><br>
&nbsp;<br>
<font face="arial" size=2>3:pj_fwd will raise stack overflow in the case
of the code below:</font><br>
<font face="arial" size=2>procedure TForm2.Button1Click(Sender:
TObject);<br>
var<br>
&nbsp; P:projPJ;<br>
&nbsp; errorno:Integer;<br>
&nbsp; temp:XY;<br>
&nbsp; temp1:XY;<br>
&nbsp; nu:Cardinal;<br>
&nbsp; i:Integer;<br>
begin<br>
&nbsp; P:=pj_init_plus(PChar(' +proj=utm +zone=11
+ellps=WGS84));</font><br>
<font face="arial" size=2>&nbsp; i:=pj_errno;<br>
&nbsp; temp.X:=0;temp.Y:=0;<br>
&nbsp; nu:=GetTickCount;<br>
&nbsp; for i:=0 to 50000 do<br>
&nbsp;&nbsp;&nbsp; temp1:=pj_inv(temp,P);<br>
&nbsp; ShowMessage(IntToStr(GetTickCount-nu));</font><br>
<font face="arial" size=2>end;</font><br>
&nbsp;<br>
&nbsp;<br>
<font face="arial" size=2>if i&lt;40000 there is no problem</font><br>
&nbsp;<br>
&nbsp;<br>
<font face="arial" size=2><a href="mailto:Bornkilled@21cn.com">Bornkilled@21cn.com</a></font><br>
&nbsp;</blockquote>
<x-sigsep><p></x-sigsep>
________________________________________________________<br>
Mike
Schmidt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Systèmes Scientifiques SEPIA<br>
President&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
SEPIA Scientific Systems<br>
Tel:
450-358-2266&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
100 Richelieu, suite 2000&nbsp;&nbsp;&nbsp;&nbsp; <br>
Fax:
450-358-2267&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Saint-Jean-sur-Richelieu<br>
e-mail: mike@sepia.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Québec,
Canada J3B 6X3<br>
<a href="http://www.sepia.com            /" eudora="autourl">http://www.sepia.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</a>
<a href="http://www.intello.com/" eudora="autourl">http://www.intello.com</a>
<br><br>
**************************************************************************** <br>
This email message is for the sole use of the intended recipient(s)<br>
and may contain confidential and privileged information. <br>
Any unauthorized review, use, disclosure or distribution is prohibited.<br>
If you are not the intended recipient, please contact the sender by <br>
reply email and destroy all copies of the original message.<br>
To reply to our email administrator directly, select the following <br>
&lt;<a href="mailto:postmaster@sepia.com" eudora="autourl"><font color="#0000FF"><u>mailto:postmaster@sepia.com</a></u></font>&gt; <br>
**************************************************************************** </html>