comp.lang.ada
 help / color / mirror / Atom feed
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



  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