From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Interfacing Ada with C
Date: Sun, 25 Jul 2010 20:26:51 +0200
Date: 2010-07-25T20:26:53+02:00 [thread overview]
Message-ID: <1x17akdoyxksk$.1edm73b1nxqyf$.dlg@40tude.net> (raw)
In-Reply-To: a5ba4513-ce2b-45d1-a5f4-ff1a7945b0b0@q12g2000yqj.googlegroups.com
On Sun, 25 Jul 2010 10:40:09 -0700 (PDT), Ada novice wrote:
> On Jul 25, 7:06�pm, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
>> C files or library files?
>
>> With library files (import or object) it is simpler
>>
>
>> (If you have only a shared library then it would require a bit more work.)
>>
>
> It's a library file in IMSL named imslcmath_dll.lib
>
> To use IMSL C library there are 2 steps:
>
> 1. Specify the location of the IMSL header files. It's an "include"
> directory in the IMSL directory
You do not need include files
> 2. Add the actual IMSL C library to the project. This IMSL C library
> is called imslcmath_dll.lib which is in a "lib" directory in the IMSL
> directory. There are other lib files, but this one is used for
> numerical tasks.
>
> I'm able to do the above easily with MVS2008/2010. The first step is
> adding the "include" directory under Project > Configuration
> Properties > C/C++ > General. The second step is hust Project > Add
> existing item.
>
>
> I have only limited experience with GPS but let's give it a try:
>
> First I add create a folder and put the file imsl.ads, imsl.adb and
> main_ada_file.adb (my testmatrix.adb). Then I create a project gpr,
> specifying the main file and the source directory (containing our 3
> files).
>
> Then according to my step 1 from above, I add the folder "include"
> from IMSL as also a source directory. So now I have 2 source
> directories.
>
> Then for step 2, I need to add the imslcmath_dll.lib file? How do I do
> that in GPS? I can compile all 3 files imsl.ads, imsl.adb,
> main_ada_file.adb in GPS. Then how do I proceed?
>
> How do I do this in GPS:
--------------------- imsl.ads
with Interfaces.C; use Interfaces.C;
package IMSL is
type Float_Matrix is -- Row-wise, packed/aligned
array (Positive range <>, Positive range <>) of C_Float;
pragma Convention (C, Float_Matrix);
type F_Complex is record
Re : C_Float;
Im : C_Float;
end record;
pragma Convention (C, F_Complex);
type Complex_Array is array (Positive range <>) of F_Complex;
pragma Convention (C, Complex_Array);
function F_Eig_Gen (Matrix : Float_Matrix) return Complex_Array;
end IMSL;
-------------------------- imsl.adb
with Interfaces.C; use Interfaces.C;
with System; use System;
package body IMSL is
procedure Free (Ptr : System.Address);
pragma Import (C, Free, "free");
function F_Eig_Gen (Matrix : Float_Matrix) return Complex_Array is
begin
if Matrix'Length (1) /= Matrix'Length (2) then
raise Constraint_Error;
end if;
declare
function imsl_f_eig_gen
(N : Int; A : Address; Terminator : Address :=
Null_Address)
return Address;
pragma Import (C, imsl_f_eig_gen, "imsl_f_eig_gen");
Ptr : Address := imsl_f_eig_gen
( Matrix'Length (1),
Matrix ( Matrix'First (1),
Matrix'First (2)
)' Address
);
Data : Complex_Array (1..Matrix'Length (1));
for Data'Address use Ptr;
pragma Import (Ada, Data);
Result : Complex_Array := Data; -- Copy, we don't own that memory
begin
Free (Ptr);
return Result;
end;
end F_Eig_Gen;
end IMSL;
------------------------------------ imsl.gpr
project IMSL is
for Source_Files use ("imsl.adb", "imsl.ads");
package Linker is
for Default_Switches ("ada") use ("imslcmath_dll.lib");
end Linker;
end IMSL;
----------------------------------- test.adb
with Ada.Text_IO; use Ada.Text_IO;
with IMSL; use IMSL;
with Interfaces.C; use Interfaces.C;
procedure Test is
Values : Complex_Array :=
F_Eig_Gen
( ( ( 8.0,-1.0,-5.0),
(-4.0, 4.0,-2.0),
(18.0,-5.0,-7.0) )
);
begin
for Index in Values'Range loop
Put_Line
( '('
& C_Float'Image (Values (Index).Re)
& " ,"
& C_Float'Image (Values (Index).Im)
& ')'
);
end loop;
end Test;
------------------------------------ test.gpr
with "imsl.gpr";
project Test is
for Source_Files use ("test.adb");
for Main use ("test.adb");
package Linker renames IMSL.Linker;
end Test;
put "imslcmath_dll.lib into the same directory or change its path in the
project files. Make sure that the DLL is in the search path when you start
the program.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2010-07-25 18:26 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-24 11:57 Interfacing Ada with C Ada novice
2010-07-24 12:08 ` Robert A Duff
2010-07-24 12:32 ` Ada novice
2010-07-24 14:52 ` Marco
2010-07-24 16:38 ` Simon Wright
2010-07-24 17:58 ` Ada novice
2010-07-25 8:29 ` Simon Wright
2010-07-25 12:21 ` Ada novice
2010-07-25 13:50 ` Dmitry A. Kazakov
2010-07-25 14:12 ` Ada novice
2010-07-25 14:17 ` Ada novice
2010-07-25 14:26 ` Simon Wright
2010-07-25 16:18 ` Ada novice
2010-07-25 17:06 ` Dmitry A. Kazakov
2010-07-25 17:42 ` Ada novice
[not found] ` <a5ba4513-ce2b-45d1-a5f4-ff1a7945b0b0@q12g2000yqj.googlegroups.com>
2010-07-25 18:26 ` Dmitry A. Kazakov [this message]
2010-07-25 18:52 ` Ada novice
2010-07-25 18:58 ` Dmitry A. Kazakov
2010-07-25 19:13 ` Ada novice
2010-07-25 19:19 ` Dmitry A. Kazakov
2010-07-25 19:28 ` Ada novice
2010-07-25 20:04 ` Dmitry A. Kazakov
2010-07-26 13:40 ` Ada novice
2010-07-26 14:52 ` Dmitry A. Kazakov
2010-07-26 17:14 ` Ada novice
[not found] ` <a2da2804-c19b-44cf-9855-834c602c4520@y11g2000yqm.googlegroups.com>
2010-07-26 17:32 ` Dmitry A. Kazakov
2010-07-26 17:50 ` Ada novice
2010-07-27 12:24 ` Peter Hermann
2010-07-27 19:01 ` Ada novice
2010-07-28 9:56 ` team-ada (was e: " Peter Hermann
2010-07-27 5:50 ` Ada novice
2010-07-27 7:27 ` Dmitry A. Kazakov
2010-07-27 7:43 ` Georg Bauhaus
2010-07-27 18:37 ` Ada novice
2010-07-27 18:40 ` Ada novice
2010-07-25 17:24 ` Simon Wright
2010-07-25 17:47 ` Simon Wright
2010-07-25 17:58 ` Ada novice
2010-07-25 23:21 ` Simon Wright
2010-07-26 1:24 ` John B. Matthews
2010-07-26 14:01 ` Ada novice
2010-07-26 15:46 ` sjw
[not found] ` <da987804-3948-4871-ab52-4a8e95f06d44@k39g2000yqb.googlegroups.com>
2010-07-26 19:46 ` Simon Wright
2010-07-26 20:39 ` Dmitry A. Kazakov
2010-07-27 5:46 ` Ada novice
2010-07-27 5:43 ` Ada novice
2010-07-27 17:33 ` Simon Wright
2010-07-27 18:34 ` Ada novice
2010-07-28 22:26 ` Simon Wright
2010-07-29 9:19 ` Ada novice
2010-07-29 19:14 ` Simon Wright
2010-07-29 20:25 ` Ada novice
2010-07-30 1:46 ` John B. Matthews
2010-07-30 9:09 ` sjw
2010-07-30 12:41 ` Ada novice
2010-07-30 15:13 ` John B. Matthews
2010-07-30 17:25 ` Ada novice
2010-07-30 19:41 ` John B. Matthews
2010-07-30 21:08 ` Ada novice
2010-07-30 22:19 ` Simon Wright
2010-07-31 12:19 ` Ada novice
2010-07-31 13:25 ` Simon Wright
2010-07-31 19:39 ` Ada novice
2010-07-31 21:02 ` Simon Wright
2010-08-01 9:36 ` Ada novice
2010-08-01 16:14 ` Simon Wright
2010-08-01 16:27 ` Ada novice
2010-08-01 17:33 ` Simon Wright
[not found] ` <997036dd-ca13-4cdf-8f88-9b47a9f83b2d@s9g2000yqd.googlegroups.com>
2010-07-31 13:08 ` Simon Wright
2010-07-31 13:17 ` Simon Wright
2010-07-30 15:10 ` John B. Matthews
2010-08-01 10:47 ` John B. Matthews
2010-08-01 17:08 ` Simon Wright
2010-08-02 1:08 ` John B. Matthews
2010-08-02 16:36 ` Simon Wright
2010-08-02 16:55 ` Ada novice
2010-08-05 9:14 ` Ada novice
2010-08-05 13:23 ` John B. Matthews
2010-08-05 13:57 ` sjw
2010-08-05 17:24 ` Ada novice
2010-08-05 17:59 ` Jeffrey Carter
2010-08-05 20:25 ` Simon Wright
2010-08-06 1:15 ` John B. Matthews
2010-08-06 9:11 ` Ada novice
2010-08-06 9:17 ` Ada novice
2010-08-06 8:04 ` Jacob Sparre Andersen
2010-08-06 8:42 ` Dmitry A. Kazakov
2010-08-06 9:26 ` Ada novice
2010-08-06 9:51 ` Dmitry A. Kazakov
2010-08-06 12:04 ` Ada novice
2010-08-06 16:49 ` Simon Wright
2010-08-06 17:27 ` Dmitry A. Kazakov
2010-08-06 18:15 ` Ada novice
2010-08-06 20:26 ` Simon Wright
2010-08-07 0:46 ` John B. Matthews
2010-08-07 7:59 ` Dmitry A. Kazakov
2010-08-07 9:09 ` Georg Bauhaus
2010-08-07 12:33 ` John B. Matthews
2010-08-06 9:49 ` Peter Hermann
2010-08-06 12:03 ` Ada novice
2010-08-07 4:07 ` Randy Brukardt
2010-08-07 8:10 ` Ada novice
2010-08-06 16:41 ` Simon Wright
2010-08-06 8:39 ` sjw
2010-07-24 16:44 ` Dmitry A. Kazakov
2010-07-24 18:04 ` Ada novice
2010-07-24 19:16 ` Dmitry A. Kazakov
2010-07-25 0:22 ` tmoran
-- strict thread matches above, loose matches on Subject: below --
2003-04-14 21:39 Paul Anderson
2003-04-14 23:05 ` tmoran
2003-04-16 2:56 ` Steve
2003-04-16 4:25 ` Steve
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox