comp.lang.ada
 help / color / mirror / Atom feed
* GNAT, Windsock, and DLLs
@ 1998-04-14  0:00 Do-While Jones
  1998-04-14  0:00 ` Barry Scott
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Do-While Jones @ 1998-04-14  0:00 UTC (permalink / raw)



The general question is, "How does GNAT link Ada 95 programs with Windows
95 DLLs?"

More specifically, "How can GNAT make use of the Berkeley-like socket
services in windsock.dll?"

In particular, "What do I need to do to get a demo program (included at
the end of this message) to call the gethostname service in windsock.dll?"

Background

Several years ago, I wrote a collection of Network Interface packages
which allow Ada 83 programs (compiled using the Telesoft Telegen 2
compiler on a Sun Sparcstation 2) to call the Berkeley BSD socket
routines.  These thick bindings gave me handy abstractions that send and
receive UDP broadcasts, and implement TCP/IP clients and servers. 

A couple years ago I ported these packages from our Sun workstations to
GNAT (Ada 95) on Silicon Graphics in no time at all.  This was easily done
because the Silicon Graphics was using a UNIX operating systems with
Berkeley sockets.

A few months ago I tried to port these same packages to GNAT (Version
3.10) on a Windows 95 machine.  Windows 95 comes with a dynamically linked
library (DLL) called windsock, which emulates all the Berkeley socket
services.  One of the simplest of these is gethostname, which returns a
character string containing the name of the host computer. 

The Problem

Use gnatchop to divide the program at the end of this message into three
compilation units.  Then use gnatmake to compile and link ni09td01. 
(Network Interfaces, component 9, Test Demo program 1.) The program
compiles, but fails at the link stage with an error message that says
there is an "undefined reference to 'gethostname' in get_host.adb".
Clearly, GNAT doesn't know about the gethostname service in windsock.dll. 

The GNAT UserUs Guide section on "Search Paths for gnatbind" (yes, I'm one
of those few people who read the documentation) says that you can tell the
linker to look for modules in other directories in several ways.  One of
these ways is to set the environment variable ADA_OBJECTS_PATH.  So, I set
ADA_OBJECTS_PATH to "C:\WINDOWS\SYSTEM" where the windsock.dll is (on my
system, at least). That didn't work. 

I suspect gnatbind is looking for a ".o" file, not a ".dll" file.

I know very little about C, and even less about Windows 95.  I suspect
this problem is more of a C/Windows 95 problem than an Ada problem.

What is the solution?

Do I have to write a zillion (well, actually eight, since I only use
socket, bind, accept, fcntrl, open, close, read, write, and gethostname) 
little C programs that call each windsock service individually, and put
their ".o" files somewhere that GNAT can find them?  Is there a way to get
GNAT to use the windsock.dll directly? 

If there is a simple solution, I'm sure many readers of Comp.lang.ada
would find it useful. 

Thanks in advance,

Do-While Jones
-------------------------------------------------------------

--                      ni09ks01.ada
--                      13 December 1994

--                      Do-While Jones
--                      324 Traci Lane
--                      Ridgecrest, CA 93555
--                      do_while@ridgecrest.ca.us

--with NETWORK;  -- part NI02

package GET_HOST is

  function Name return string;
    -- Tells you the name of the computer that is executing
    -- the program.

  --function Network_Address return NETWORK.Address_numbers;
    -- Tells you the network address  of the computer that
    -- is executing the program.

end GET_HOST;

--                      ni09kb01.ada
--                      13 December 1994

--                      Do-While Jones
--                      324 Traci Lane
--                      Ridgecrest, CA 93555
--                      do_while@ridgecrest.ca.us

with SYSTEM;

package body GET_HOST is

  --- Interface to UNIX service ---

  function gethostname(
    name_receiver : SYSTEM.Address;
    namelen       : integer)
    return integer;
  pragma Interface(C, gethostname);

  ---------------------------------

  function Name return string is
    -- Assume the name will be 20 characters
    -- or less.
    C_STRING : string(1..21)
      := (others => ASCII.NUL);
    UNIX_RESULT : integer;
    LENGTH      : integer;
  begin
    -- Call a UNIX service to put the name
    -- in C_STRING.
    UNIX_RESULT := gethostname(
      C_STRING(1)'ADDRESS, C_STRING'LENGTH);
    if UNIX_RESULT /= 0 then
      -- UNIX failure.
      return "HOST_NAME_ERROR";
    end if;

    -- Find out how long the string is.
    LENGTH := 0;
    for i in C_STRING'RANGE loop
      exit when C_STRING(i) = ASCII.NUL;
      LENGTH := i;
    end loop;

    -- Return the non-null characters of the string.
    return C_STRING(1..LENGTH);
  end Name;

  --function Network_Address
    --return NETWORK.Address_numbers is
  --begin
    --return NETWORK.Host_Number(Name);
  --end Network_Address;

end GET_HOST;

--                      ni09td01.ada
--                      13 December 1994

--                      Do-While Jones
--                      324 Traci Lane
--                      Ridgecrest, CA 93555
--                      do_while@ridgecrest.ca.us

with TEXT_IO,
     --NETWORK,   -- part NI02
     GET_HOST;  -- part NI09

procedure NI09TD01 is
begin
  TEXT_IO.Put_Line("This machine is "
    & GET_HOST.Name & ".");
  --TEXT_IO.Put_Line("It is at address "
    --& NETWORK.Image(GET_HOST.Network_Address)
    --& ".");
end NI09TD01;






^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-14  0:00 GNAT, Windsock, and DLLs Do-While Jones
@ 1998-04-14  0:00 ` Barry Scott
  1998-04-14  0:00 ` Tom Moran
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Barry Scott @ 1998-04-14  0:00 UTC (permalink / raw)



I'm not sure it matters for your code, but the dll is winsock.dll, not
windsock.dll.
Barry

Do-While Jones wrote in message <6gvp5f$evp$1@owens.ridgecrest.ca.us>...
>The general question is, "How does GNAT link Ada 95 programs with Windows
>95 DLLs?"
>
>More specifically, "How can GNAT make use of the Berkeley-like socket
>services in windsock.dll?"
>
>In particular, "What do I need to do to get a demo program (included at
>the end of this message) to call the gethostname service in windsock.dll?"
>
>Background
>
>Several years ago, I wrote a collection of Network Interface packages
>which allow Ada 83 programs (compiled using the Telesoft Telegen 2
>compiler on a Sun Sparcstation 2) to call the Berkeley BSD socket
>routines.  These thick bindings gave me handy abstractions that send and
>receive UDP broadcasts, and implement TCP/IP clients and servers.
>
>A couple years ago I ported these packages from our Sun workstations to
>GNAT (Ada 95) on Silicon Graphics in no time at all.  This was easily done
>because the Silicon Graphics was using a UNIX operating systems with
>Berkeley sockets.
>
>A few months ago I tried to port these same packages to GNAT (Version
>3.10) on a Windows 95 machine.  Windows 95 comes with a dynamically linked
>library (DLL) called windsock, which emulates all the Berkeley socket
>services.  One of the simplest of these is gethostname, which returns a
>character string containing the name of the host computer.
>
>The Problem
>
>Use gnatchop to divide the program at the end of this message into three
>compilation units.  Then use gnatmake to compile and link ni09td01.
>(Network Interfaces, component 9, Test Demo program 1.) The program
>compiles, but fails at the link stage with an error message that says
>there is an "undefined reference to 'gethostname' in get_host.adb".
>Clearly, GNAT doesn't know about the gethostname service in windsock.dll.
>
>The GNAT UserUs Guide section on "Search Paths for gnatbind" (yes, I'm one
>of those few people who read the documentation) says that you can tell the
>linker to look for modules in other directories in several ways.  One of
>these ways is to set the environment variable ADA_OBJECTS_PATH.  So, I set
>ADA_OBJECTS_PATH to "C:\WINDOWS\SYSTEM" where the windsock.dll is (on my
>system, at least). That didn't work.
>
>I suspect gnatbind is looking for a ".o" file, not a ".dll" file.
>
>I know very little about C, and even less about Windows 95.  I suspect
>this problem is more of a C/Windows 95 problem than an Ada problem.
>
>What is the solution?
>
>Do I have to write a zillion (well, actually eight, since I only use
>socket, bind, accept, fcntrl, open, close, read, write, and gethostname)
>little C programs that call each windsock service individually, and put
>their ".o" files somewhere that GNAT can find them?  Is there a way to get
>GNAT to use the windsock.dll directly?
>
>If there is a simple solution, I'm sure many readers of Comp.lang.ada
>would find it useful.
>
>Thanks in advance,
>
>Do-While Jones
>-------------------------------------------------------------
>
>--                      ni09ks01.ada
>--                      13 December 1994
>
>--                      Do-While Jones
>--                      324 Traci Lane
>--                      Ridgecrest, CA 93555
>--                      do_while@ridgecrest.ca.us
>
>--with NETWORK;  -- part NI02
>
>package GET_HOST is
>
>  function Name return string;
>    -- Tells you the name of the computer that is executing
>    -- the program.
>
>  --function Network_Address return NETWORK.Address_numbers;
>    -- Tells you the network address  of the computer that
>    -- is executing the program.
>
>end GET_HOST;
>
>--                      ni09kb01.ada
>--                      13 December 1994
>
>--                      Do-While Jones
>--                      324 Traci Lane
>--                      Ridgecrest, CA 93555
>--                      do_while@ridgecrest.ca.us
>
>with SYSTEM;
>
>package body GET_HOST is
>
>  --- Interface to UNIX service ---
>
>  function gethostname(
>    name_receiver : SYSTEM.Address;
>    namelen       : integer)
>    return integer;
>  pragma Interface(C, gethostname);
>
>  ---------------------------------
>
>  function Name return string is
>    -- Assume the name will be 20 characters
>    -- or less.
>    C_STRING : string(1..21)
>      := (others => ASCII.NUL);
>    UNIX_RESULT : integer;
>    LENGTH      : integer;
>  begin
>    -- Call a UNIX service to put the name
>    -- in C_STRING.
>    UNIX_RESULT := gethostname(
>      C_STRING(1)'ADDRESS, C_STRING'LENGTH);
>    if UNIX_RESULT /= 0 then
>      -- UNIX failure.
>      return "HOST_NAME_ERROR";
>    end if;
>
>    -- Find out how long the string is.
>    LENGTH := 0;
>    for i in C_STRING'RANGE loop
>      exit when C_STRING(i) = ASCII.NUL;
>      LENGTH := i;
>    end loop;
>
>    -- Return the non-null characters of the string.
>    return C_STRING(1..LENGTH);
>  end Name;
>
>  --function Network_Address
>    --return NETWORK.Address_numbers is
>  --begin
>    --return NETWORK.Host_Number(Name);
>  --end Network_Address;
>
>end GET_HOST;
>
>--                      ni09td01.ada
>--                      13 December 1994
>
>--                      Do-While Jones
>--                      324 Traci Lane
>--                      Ridgecrest, CA 93555
>--                      do_while@ridgecrest.ca.us
>
>with TEXT_IO,
>     --NETWORK,   -- part NI02
>     GET_HOST;  -- part NI09
>
>procedure NI09TD01 is
>begin
>  TEXT_IO.Put_Line("This machine is "
>    & GET_HOST.Name & ".");
>  --TEXT_IO.Put_Line("It is at address "
>    --& NETWORK.Image(GET_HOST.Network_Address)
>    --& ".");
>end NI09TD01;
>
>






^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-14  0:00 GNAT, Windsock, and DLLs Do-While Jones
  1998-04-14  0:00 ` Barry Scott
@ 1998-04-14  0:00 ` Tom Moran
  1998-04-16  0:00 ` Jerry van Dijk
  1998-04-16  0:00 ` Stephen Leake
  3 siblings, 0 replies; 7+ messages in thread
From: Tom Moran @ 1998-04-14  0:00 UTC (permalink / raw)



My  winsock code contains
  pragma Linker_Options ("-lwsock32");  -- for Gnat
  function gethostbyname(name: Claw.Win32.LPCStr) return PHOSTENTs;
  pragma Import(Stdcall, gethostbyname, "gethostbyname");
etc. and runs.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-14  0:00 GNAT, Windsock, and DLLs Do-While Jones
                   ` (2 preceding siblings ...)
  1998-04-16  0:00 ` Jerry van Dijk
@ 1998-04-16  0:00 ` Stephen Leake
  1998-04-16  0:00   ` Jerry van Dijk
  1998-04-16  0:00   ` Martin C. Carlisle
  3 siblings, 2 replies; 7+ messages in thread
From: Stephen Leake @ 1998-04-16  0:00 UTC (permalink / raw)



Do-While Jones asks how to use GNAT to link with Windows 95 DLLs.

The answer is that you need to include Windows .lib files in your link
command. .lib files are normal library files; they usually contain
object files. For DLLs, they just contain the information on how to call
the DLL.

So, where to you get the .lib files for the Windows DLLs? One source is
the Win32Ada binding; I think that is part of the GNAT distribution. I'm
not sure if the winsock DLL is covered in that distribution.

There should also be a tool that generates a .lib file from a DLL; the
DLL (if built properly) has all the information needed to build a lib
file. I don't think the GNAT distribution has such a tool. (there is an
executable called "dlltool", but it creates a dll).

Borland C++ comes with a dll to lib tool called "implib.exe" (I've used
it). However, you can't use that with GNAT, because the library and
object file formats are different between GNAT and Borland (and
Microsoft, as well).

So, does anyone know if there is an "implib" for GNAT? 

-- 
- Stephe




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-14  0:00 GNAT, Windsock, and DLLs Do-While Jones
  1998-04-14  0:00 ` Barry Scott
  1998-04-14  0:00 ` Tom Moran
@ 1998-04-16  0:00 ` Jerry van Dijk
  1998-04-16  0:00 ` Stephen Leake
  3 siblings, 0 replies; 7+ messages in thread
From: Jerry van Dijk @ 1998-04-16  0:00 UTC (permalink / raw)



Do-While Jones (do_while@ridgecrest.ca.us) wrote:

: In particular, "What do I need to do to get a demo program (included at
: the end of this message) to call the gethostname service in windsock.dll?"

Although WinSock looks a lot like normal sockets, there are some 
differences.

Here's an example of getting the host name under Win95, hopefully this
will get you on the right track:

-----------------------------------------------------------------------
--
--  File:        test.adb
--  Description: test of the Win32 sockets DLL
--  Rev:         0.1
--  Date:        16-apr-1998
--  Author:      Jerry van Dijk
--  Mail:        jdijk@acm.org
--
--  Copyright (c) Jerry van Dijk, 1998
--  Billie Holidaystraat 28
--  2324 LK Leiden
--  THE NETHERLANDS
--  tel int + 31 71 531 4365
--
--  Permission granted to use for any purpose, provided this copyright
--  remains attached and unmodified.
--
--  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
--  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
--  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
--
-----------------------------------------------------------------------

with Winsock;     use Winsock;
with Ada.Text_IO; use Ada.Text_IO;

procedure Test is
begin

   Startup_Sockets;

   Put_Line ("The name of this host is " & Get_Host_Name);

   Cleanup_Sockets;

end Test;


-----------------------------------------------------------------------
--
--  File:        winsock.ads
--  Description: very partial interface to the Win32 sockets DLL for GNAT
--  Rev:         0.1
--  Date:        16-apr-1998
--  Author:      Jerry van Dijk
--  Mail:        jdijk@acm.org
--
--  Copyright (c) Jerry van Dijk, 1998
--  Billie Holidaystraat 28
--  2324 LK Leiden
--  THE NETHERLANDS
--  tel int + 31 71 531 4365
--
--  Permission granted to use for any purpose, provided this copyright
--  remains attached and unmodified.
--
--  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
--  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
--  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
--
-----------------------------------------------------------------------

pragma Linker_Options ("-lwsock32");

with Ada.Unchecked_Deallocation;

with Interfaces;           use Interfaces;
with Interfaces.C;         use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;

package Winsock is

   ----------------
   -- Exceptions --
   ----------------

   WSAEFAULT             : exception; -- A namelen parameter is too small
   WSAEINVAL             : exception; -- Socket version not supported by DLL
   WSAENETDOWN           : exception; -- Network subsystem failed
   WSAEINPROGRESS        : exception; -- Blocking sockets operation active
   WSASYSNOTREADY        : exception; -- Network not ready for communication
   WSANOTINITIALISED     : exception; -- Sockets are not initialized
   WSAVERNOTSUPPORTED    : exception; -- Application socket version unsupported

   UNKNOWN_SOCKETS_ERROR : exception; -- Catch all others exception

   --------------------------------
   -- Init/Cleanup sockets usage --
   --------------------------------

   procedure Startup_Sockets;
   procedure Cleanup_Sockets;

   ----------------------
   -- Socket functions --
   ----------------------

   function Get_Host_Name return String;

end Winsock;


-----------------------------------------------------------------------
--
--  File:        winsock.adb
--  Description: very partial interface to the Win32 sockets DLL for GNAT
--  Rev:         0.1
--  Date:        16-apr-1998
--  Author:      Jerry van Dijk
--  Mail:        jdijk@acm.org
--
--  Copyright (c) Jerry van Dijk, 1998
--  Billie Holidaystraat 28
--  2324 LK Leiden
--  THE NETHERLANDS
--  tel int + 31 71 531 4365
--
--  Permission granted to use for any purpose, provided this copyright
--  remains attached and unmodified.
--
--  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
--  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
--  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
--
-----------------------------------------------------------------------

package body Winsock is

   --------------------------------------------------------------------

   Sockets_Version : constant unsigned_16 := 16#0101#;

   --------------------------------------------------------------------

   WSAEFAULT_VALUE          : constant Integer := 10014;
   WSAEINVAL_VALUE          : constant Integer := 10022;
   WSAENETDOWN_VALUE        : constant Integer := 10050;
   WSAEINPROGRESS_VALUE     : constant Integer := 10036;
   WSASYSNOTREADY_VALUE     : constant Integer := 10091;
   WSANOTINITIALISED_VALUE  : constant Integer := 10093;
   WSAVERNOTSUPPORTED_VALUE : constant Integer := 10092;

   function WSAGetLastError return Integer;
   pragma Import (StdCall, WSAGetLastError, "WSAGetLastError");

   procedure Check_Result (Result : in Integer) is
   begin
      if Result /= 0 then
         case Result is
            when WSAEINVAL_VALUE          => raise WSAEINVAL;
            when WSAEFAULT_VALUE          => raise WSAEFAULT;
            when WSAENETDOWN_VALUE        => raise WSAENETDOWN;
            when WSAEINPROGRESS_VALUE     => raise WSAEINPROGRESS;
            when WSASYSNOTREADY_VALUE     => raise WSASYSNOTREADY;
            when WSANOTINITIALISED_VALUE  => raise WSANOTINITIALISED;
            when WSAVERNOTSUPPORTED_VALUE => raise WSAVERNOTSUPPORTED;
            when others                   => raise UNKNOWN_SOCKETS_ERROR;
         end case;
      end if;
   end Check_Result;
   pragma Inline (Check_Result);

   --------------------------------------------------------------------

   WSASYS_STATUS_LEN  : constant := 128;
   WSADESCRIPTION_LEN : constant := 256;

   type WSADATA is
      record
         wVersion       : unsigned_16;
         wHighVersion   : unsigned_16;
         szDescription  : char_array (1 .. WSADESCRIPTION_LEN+1);
         szSystemStatus : char_array (1 .. WSASYS_STATUS_LEN+1);
         iMaxSockets    : unsigned_16;
         iMaxUdpDg      : unsigned_16;
         lpVendorInfo   : chars_ptr;
      end record;
   pragma Convention (C, WSADATA);

   type WSADATA_Access is access all WSADATA;
   pragma Convention (C, WSADATA_Access);

   procedure Free is new Ada.Unchecked_Deallocation (WSADATA, WSADATA_Access);

   function WSAStartup (wVersionRequested : Unsigned_16;
                        lpWSAData         : WSADATA_Access) return Integer;
   pragma Import (StdCall, WSAStartup, "WSAStartup");

   function WSACleanup return Integer;
   pragma Import (StdCall, WSACleanup, "WSACleanup");

   --------------------------------------------------------------------

   function gethostname (name : char_array; length : size_t) return Integer;
   pragma Import (StdCall, gethostname, "gethostname");

   --------------------------------------------------------------------

   procedure Startup_Sockets is
      Result   : Integer;
      Data_Ptr : WSADATA_Access := new WSADATA;
      Version  : unsigned_16 := Sockets_Version;
   begin
      Result := WSAStartup (Version, Data_Ptr);
      Check_Result (Result);
      Free (Data_Ptr);
      if Version /= Sockets_Version then
         Result := WSACleanup;
         raise WSAVERNOTSUPPORTED;
      end if;
   end Startup_Sockets;

   --------------------------------------------------------------------

   procedure Cleanup_Sockets is
      Result : Integer;
   begin
      Result := WSACleanup;
      Check_Result (WSAGetLastError);
   end Cleanup_Sockets;

   --------------------------------------------------------------------

   function Get_Host_Name return String is
      Result      : Integer;
      Temp_Length : constant size_t := 256;
      Temp_Name   : char_array (1 .. Temp_Length) := (others => ' ');
   begin
      Result := gethostname (Temp_Name, Temp_Length);
      Check_Result (WSAGetLastError);
      return To_Ada (Temp_Name);
   end Get_Host_Name;

end Winsock;
-- 
-- Jerry van Dijk  | email: jdijk@acm.org
-- Leiden, Holland | member Team-Ada




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-16  0:00 ` Stephen Leake
@ 1998-04-16  0:00   ` Jerry van Dijk
  1998-04-16  0:00   ` Martin C. Carlisle
  1 sibling, 0 replies; 7+ messages in thread
From: Jerry van Dijk @ 1998-04-16  0:00 UTC (permalink / raw)



Stephen Leake (Stephen.Leake@gsfc.nasa.gov) wrote:

: So, does anyone know if there is an "implib" for GNAT? 

DLL2DEF which you can download from my homepage http://stad.dsl.nl/~jvandyk
can generate a .def file from a DLL. dlltool can then take this .def file
and generate an import library from it.

Jerry.
-- 
-- Jerry van Dijk  | email: jdijk@acm.org
-- Leiden, Holland | member Team-Ada




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: GNAT, Windsock, and DLLs
  1998-04-16  0:00 ` Stephen Leake
  1998-04-16  0:00   ` Jerry van Dijk
@ 1998-04-16  0:00   ` Martin C. Carlisle
  1 sibling, 0 replies; 7+ messages in thread
From: Martin C. Carlisle @ 1998-04-16  0:00 UTC (permalink / raw)



In article <353617FB.2CF2@gsfc.nasa.gov>,
Stephen Leake  <Stephen.Leake@gsfc.nasa.gov> wrote:
>There should also be a tool that generates a .lib file from a DLL; the
>DLL (if built properly) has all the information needed to build a lib
>file. I don't think the GNAT distribution has such a tool. (there is an
>executable called "dlltool", but it creates a dll).
>
>So, does anyone know if there is an "implib" for GNAT? 

Jerry van Dijk (http://stad.dsl.nl/~jvandyk) seems to be one of the leading
experts in this arena.  He includes complete instructions on how to add
a dll to a GNAT compilation on his Ada 95 for Windows web page (previously
mentioned).

--Martin

-- 
Martin C. Carlisle, Computer Science, US Air Force Academy
mcc@cs.usafa.af.mil, http://www.usafa.af.mil/dfcs/bios/carlisle.html
DISCLAIMER:  This content in no way reflects the opinions, standard or 
policy of the US Air Force Academy or the United States Government.




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~1998-04-16  0:00 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1998-04-14  0:00 GNAT, Windsock, and DLLs Do-While Jones
1998-04-14  0:00 ` Barry Scott
1998-04-14  0:00 ` Tom Moran
1998-04-16  0:00 ` Jerry van Dijk
1998-04-16  0:00 ` Stephen Leake
1998-04-16  0:00   ` Jerry van Dijk
1998-04-16  0:00   ` Martin C. Carlisle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox