Programming interface to the Swiss Ephemeris - programmiastral.com
Programming interface to the Swiss Ephemeris - programmiastral.com
Programming interface to the Swiss Ephemeris - programmiastral.com
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Swiss</strong> <strong>Ephemeris</strong> 40<br />
19. Using <strong>the</strong> DLL with Borland Delphi and C++ Builder<br />
19.1 Delphi 2.0 and higher (32-bit)<br />
The information in this section was contributed by Markus Fabian, Bern, Switzerland.<br />
In Delphi 2.0 <strong>the</strong> declaration of <strong>the</strong> function swe_calc() looks like this:<br />
xx : Array[0..5] of double;<br />
function swe_calc (tjd : double; // Julian day number<br />
ipl : Integer; // planet number<br />
iflag : Longint; // flag bits<br />
var xx[0] : double;<br />
sErr : PChar // Error-String;<br />
) : Longint; stdcall; far; external 'swedll32.dll' Name '_swe_calc@24';<br />
A nearly <strong>com</strong>plete set of declarations is in file \sweph\delphi2\swe_d32.pas.<br />
A small sample project for Delphi 2.0 is also included in <strong>the</strong> same direc<strong>to</strong>ry (starting with release 1.25 from June<br />
1998). This sample requires <strong>the</strong> DLL <strong>to</strong> exist in <strong>the</strong> same direc<strong>to</strong>ry as <strong>the</strong> sample.<br />
19.2 Delphi 1.0 (16-bit)<br />
The 16-bit Delphi <strong>com</strong>piler belongs <strong>to</strong> <strong>the</strong> class of <strong>com</strong>pilers we call ‘brain damaged’. There is a problem with<br />
functions returning a double as <strong>the</strong> function value, e.g. swe_julday(). These functions do not work. There are<br />
twin functions provided in <strong>the</strong> DLL which use an additional paramater <strong>to</strong> return <strong>the</strong> double, like<br />
swe_julday_d(). These twin functions use also always pointers <strong>to</strong> double instead of double for all double<br />
parameters.<br />
In <strong>the</strong> direc<strong>to</strong>ry sweph\src\delphi1 a <strong>com</strong>plete small sample program written with Delphi 1.0 is provided. It<br />
demonstrates <strong>the</strong> correct declaration and use of <strong>the</strong> most important <strong>Swiss</strong>Eph functions.<br />
Besides, <strong>the</strong>re is a file swe_de16.pas, which contains all function declarations for Delphi 1.0 and <strong>the</strong> <strong>Swiss</strong>eph<br />
constants such as flag bits and planet indices. You can copy <strong>the</strong>m in<strong>to</strong> your Pascal code.<br />
Here are a few sample declarations:<br />
Var xx<br />
: Array[0..5] of double; serr : Array[0..255] of Char;<br />
function swe_deltat_d(var tjd: double; var deltat: double): integer; far; external 'swedll16';<br />
function swe_calc(<br />
tjd: double; {Julian day number }<br />
ipl: Integer; {planet number }<br />
iflag: Longint; {flag bits }<br />
var xx: double; {address of first array element}<br />
sErr: Pchar {Error-String; }<br />
): Longint; far; external 'swedll16';<br />
function swe_julday_d(<br />
year: Integer;<br />
month: Integer;<br />
day: Integer;<br />
var hour: double;<br />
gregflag: Integer;<br />
var tjd: double<br />
) : Integer; far; external 'swedll16';<br />
Remember: With Delphi 1, do not use functions which have a double function value. Also note that, in Pascal,<br />
double pointer parameters need <strong>to</strong> be defined as ‘var’(by reference, not by value).<br />
19.3 Borland C++ Builder<br />
Borland C++ Builder (BCB) does not understand <strong>the</strong> Microsoft format in <strong>the</strong> library file SWEDLL32.LIB; it<br />
reports an OMF error when this file is used in a BCB project. The user must create his/her own LIB file for BCB<br />
with <strong>the</strong> utility IMPLIB which is part of BCB.