* Plugins/Dynamic Libraries
@ 2004-11-10 20:46 Andrew W
2004-11-11 8:28 ` Martin Krischik
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Andrew W @ 2004-11-10 20:46 UTC (permalink / raw)
Greetings All,
I am starting work on a plug in / dynamic library project with ADA and just
wanted to see if I had missed anything. I understand that this is very
compiler and OS dependent.
Under Linux the accepted method is using the DLibs bindings to dlopen etc
http://www.cyberdanx.co.uk/ada95/dlibs.html
Under Windows the accepted method is using COM
http://www.gnavi.org/gnatcom/
I found a post from last year which mentions: "there is a AdaPlugin project
for Linux that use Dynamic Glib Module functionnality" but did not provide
any more information - I have been unable to find such a project.
I would most obliged if anybody has pointers to any other ada dynamic
library implimentations (especially under Linux/Unix).
Thank you very much in advance,
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-10 20:46 Plugins/Dynamic Libraries Andrew W
@ 2004-11-11 8:28 ` Martin Krischik
2004-11-11 10:49 ` Adrien Plisson
2004-11-12 0:00 ` David Botton
2004-11-11 10:34 ` Adrien Plisson
2004-12-04 14:27 ` Lionel Draghi
2 siblings, 2 replies; 13+ messages in thread
From: Martin Krischik @ 2004-11-11 8:28 UTC (permalink / raw)
Andrew W wrote:
> Greetings All,
>
> I am starting work on a plug in / dynamic library project with ADA and
> just
> wanted to see if I had missed anything. I understand that this is very
> compiler and OS dependent.
>
> Under Linux the accepted method is using the DLibs bindings to dlopen etc
> http://www.cyberdanx.co.uk/ada95/dlibs.html
>
> Under Windows the accepted method is using COM
> http://www.gnavi.org/gnatcom/
>
> I found a post from last year which mentions: "there is a AdaPlugin
> project for Linux that use Dynamic Glib Module functionnality" but did not
> provide any more information - I have been unable to find such a project.
>
> I would most obliged if anybody has pointers to any other ada dynamic
> library implimentations (especially under Linux/Unix).
A current version of GNAT and GPS can do DLLs out of the box. Just Add the
for Library_Dir use ...;
for Library_Name use ...;
for Library_Kind use ...;
for Library_Version use ....;
to your project file and all needed steps will be done for you. Why there is
no checkbox in GPS I don't know. For Windows you need the "experimental"
MinGW GNAT based on GCC 3.4.2. Older GNAT's can do Linux DLLs only.
With Regards
Martin
--
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-10 20:46 Plugins/Dynamic Libraries Andrew W
2004-11-11 8:28 ` Martin Krischik
@ 2004-11-11 10:34 ` Adrien Plisson
2004-11-12 0:12 ` David Botton
2004-12-04 14:27 ` Lionel Draghi
2 siblings, 1 reply; 13+ messages in thread
From: Adrien Plisson @ 2004-11-11 10:34 UTC (permalink / raw)
Andrew W wrote:
> Under Linux the accepted method is using the DLibs bindings to dlopen etc
> http://www.cyberdanx.co.uk/ada95/dlibs.html
>
> Under Windows the accepted method is using COM
> http://www.gnavi.org/gnatcom/
well, let's relieve the pain:
for dynamic libraries under Windows, the accepted method is _NOT_ COM !
the equivalent of Windows COM under Linux may be CORBA, and the
equivalent of Linux dlopen under Windows is LoadLibrary.
these are 2 totally different approaches to the problem:
- LoadLibrary and dlopen allows to load a module whose structure is
already known through the use of header files, .def files and other
documentations. the module itself does expose fully the name of the
methods it contains (it may expose it, often decorated) nor the name or
types of arguments to those methods. it is the programmer responsability
to check that his header file correspond exactly to the version of the
module he is trying to use, and the compiler will check that arguments
types to method calls are correct.
- COM and CORBA allows to load modules whose structure and content is
unknown. the module exposes fully its name, version, methods and other
definitions. for each method, it also exposes the type of arguments in a
rather descriptive way. this allows to plug an unknown module into an
application at runtime. it also allows to plug a module which was not
existing at the time the application was written.
so LoadLibrary an ddlopen are lightweight runtime dynamic library
mechanisms whereas COM and CORBA are heavyweight dynamic library mechanisms.
if you plan on working on this subject, try to use equivalent mechanisms
on each platform you target.
please note that there are many bindings to those methods existing:
PolyORB, AdaBroker or ORBIT-Ada are CORBA implementations, DLib for
dlopen, LoadLibrary should be accessible through Win32Ada, and for
COM... well, i don't know...
--
rien
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 8:28 ` Martin Krischik
@ 2004-11-11 10:49 ` Adrien Plisson
2004-11-11 12:42 ` Frank Piron
2004-11-11 13:59 ` Martin Krischik
2004-11-12 0:00 ` David Botton
1 sibling, 2 replies; 13+ messages in thread
From: Adrien Plisson @ 2004-11-11 10:49 UTC (permalink / raw)
Martin Krischik wrote:
> A current version of GNAT and GPS can do DLLs out of the box. Just Add the
>
> for Library_Dir use ...;
> for Library_Name use ...;
> for Library_Kind use ...;
> for Library_Version use ....;
these are static bindings done at compile time. the resulting executable
contains a segment which tells the system to load the given library and
relocate symbols in the process space. but if the library is not present
at application startup, the application does not start: the system is
responsible for loading and checking the dll. (at least it works this
way under windows).
Andrew was talking about dynamic bindings at runtime. that is calling a
function which loads the dll, whose name is contained in a variable. if
at application startup the library does not exists, it is not a problem:
the programmer is responsible for loading and checking the dll.
> to your project file and all needed steps will be done for you. Why there is
> no checkbox in GPS I don't know. For Windows you need the "experimental"
> MinGW GNAT based on GCC 3.4.2. Older GNAT's can do Linux DLLs only.
it seems GNAT 3.15p for windows is doing DLLs (according to the doc, i
had no time to test it).
--
rien
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 10:49 ` Adrien Plisson
@ 2004-11-11 12:42 ` Frank Piron
2004-11-11 13:59 ` Martin Krischik
1 sibling, 0 replies; 13+ messages in thread
From: Frank Piron @ 2004-11-11 12:42 UTC (permalink / raw)
Thu, 11 Nov 2004 11:49:17 +0100 Adrien Plisson
<aplisson-news@stochastique.net> wrote:
> it seems GNAT 3.15p for windows is doing DLLs (according to the doc, i
> had no time to test it).
>
It does and it works fine. We've build many dll's with GNAT 3.15p.
E.g. we use them inside a Winword macro and transport the doc into an
Oracle BLOB column.
--
Frank Piron,
etfrankatkonaddotn
(leftrotate two)
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 10:49 ` Adrien Plisson
2004-11-11 12:42 ` Frank Piron
@ 2004-11-11 13:59 ` Martin Krischik
2004-11-11 16:16 ` Pascal Obry
1 sibling, 1 reply; 13+ messages in thread
From: Martin Krischik @ 2004-11-11 13:59 UTC (permalink / raw)
Adrien Plisson wrote:
> Martin Krischik wrote:
>
>> A current version of GNAT and GPS can do DLLs out of the box. Just Add
>> the
>>
>> for Library_Dir use ...;
>> for Library_Name use ...;
>> for Library_Kind use ...;
>> for Library_Version use ....;
>
> these are static bindings done at compile time. the resulting executable
> contains a segment which tells the system to load the given library and
> relocate symbols in the process space. but if the library is not present
> at application startup, the application does not start: the system is
> responsible for loading and checking the dll. (at least it works this
> way under windows).
>
> Andrew was talking about dynamic bindings at runtime. that is calling a
> function which loads the dll, whose name is contained in a variable. if
> at application startup the library does not exists, it is not a problem:
> the programmer is responsible for loading and checking the dll.
>
>> to your project file and all needed steps will be done for you. Why there
>> is no checkbox in GPS I don't know. For Windows you need the
>> "experimental" MinGW GNAT based on GCC 3.4.2. Older GNAT's can do Linux
>> DLLs only.
>
> it seems GNAT 3.15p for windows is doing DLLs (according to the doc, i
> had no time to test it).
Last time I checked in GNAT 3.15p you had to read 2 pages of documentation
and then call dlltool 3 times with all sorts of wacky options while in GCC
3.4.2 you just tell the project manager you want a DLL and then GNAT does
it all for you (incl. calling dlltool).
With Regards
Martin
--
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 13:59 ` Martin Krischik
@ 2004-11-11 16:16 ` Pascal Obry
0 siblings, 0 replies; 13+ messages in thread
From: Pascal Obry @ 2004-11-11 16:16 UTC (permalink / raw)
Martin Krischik <martin@krischik.com> writes:
> Last time I checked in GNAT 3.15p you had to read 2 pages of documentation
> and then call dlltool 3 times with all sorts of wacky options while in GCC
> 3.4.2 you just tell the project manager you want a DLL and then GNAT does
> it all for you (incl. calling dlltool).
Not if you used gnatdll which handles everything for you. But right, the new
support based on project file is simplest yet and is following the same
procedure as to build .so on GNU/Linux.
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 8:28 ` Martin Krischik
2004-11-11 10:49 ` Adrien Plisson
@ 2004-11-12 0:00 ` David Botton
2004-11-12 18:17 ` Pascal Obry
1 sibling, 1 reply; 13+ messages in thread
From: David Botton @ 2004-11-12 0:00 UTC (permalink / raw)
GNAT has had no problems with DLLs already for many versions prior.
Here is an old article for using GNAT 3.11p
http://www.adapower.com/adapower1/articles/howto-gdllc.html
If I recall, the GNAT UG has the current directions which are fairly
easy. For an example see GNATCOM (which automatically generates for you
from an idl file a .EXE and .DLL code for a COM object and make.bat to
compile it)
David Botton
On 2004-11-11 03:28:07 -0500, Martin Krischik <martin@krischik.com> said:
> For Windows you need the "experimental"
> MinGW GNAT based on GCC 3.4.2. Older GNAT's can do Linux DLLs only.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-11 10:34 ` Adrien Plisson
@ 2004-11-12 0:12 ` David Botton
2004-11-12 9:53 ` Adrien Plisson
0 siblings, 1 reply; 13+ messages in thread
From: David Botton @ 2004-11-12 0:12 UTC (permalink / raw)
On 2004-11-11 05:34:16 -0500, Adrien Plisson
<aplisson-news@stochastique.net> said:
> well, let's relieve the pain:
> for dynamic libraries under Windows, the accepted method is _NOT_ COM !
> the equivalent of Windows COM under Linux may be CORBA, and the
> equivalent of Linux dlopen under Windows is LoadLibrary.
I would not say they are equivalent. COM is also used as a spec for
communication on a much smaller scale. As for being the accepted
method, it depends on what you are trying to achieve. Most of the time
COM is in fact preferable (encased in DLL, ie. an inproc server) since
it is an automatic plug-in to Windows, .NET, VB, etc. DLLs still serve
there place, but COM on Ada is easy to do and the results are far more
flexible.
I find that in most modern serious projects COM (on Windows and
starting recently for Mac OS X) is in fact being used over a plain dll
and in particular if you are looking to do plug-ins.
In fact, on Mac OS X plug-in are also COM in a shared lib just like on
Windows. COM is more of a spec for plug-ins that can interoperate than
a distributed object system like CORBA.
There is no reason not to use the COM "spec" in the same way on Linux
for plug-ins. Take a look at InsideCOM (Microsoft Press) for an
introduction to COM the spec (it doesn't serve as a good intro to COM
on Windows incidentally) The GNATCOM framework though would need a
little bit of work though to make it really viable though for use on
Linux, but is very reasonably doable.
I plan on a port of GNATCOM to OS X in the next year or so and that
would be usable on Linux as well. On OS X it buys you the ability to
plug-in to web browsers, etc. but on Linux you would still be able to
use it for the purpose you are looking for.
>
> if you plan on working on this subject, try to use equivalent
> mechanisms on each platform you target.
>
> please note that there are many bindings to those methods existing:
> PolyORB, AdaBroker or ORBIT-Ada are CORBA implementations, DLib for
> dlopen, LoadLibrary should be accessible through Win32Ada, and for
> COM... well, i don't know...
GNATCOM of course :-) as he pointed out. http://www.gnavi.org/gnatcom
David Botton
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-12 0:12 ` David Botton
@ 2004-11-12 9:53 ` Adrien Plisson
2004-11-14 3:38 ` David Botton
0 siblings, 1 reply; 13+ messages in thread
From: Adrien Plisson @ 2004-11-12 9:53 UTC (permalink / raw)
David Botton wrote:
> I would not say they are equivalent. COM is also used as a spec for
> communication on a much smaller scale. As for being the accepted method,
> it depends on what you are trying to achieve. Most of the time COM is in
> fact preferable (encased in DLL, ie. an inproc server) since it is an
> automatic plug-in to Windows, .NET, VB, etc. DLLs still serve there
> place, but COM on Ada is easy to do and the results are far more flexible.
you're right, COM is not equivalent to corba, but DCOM is. but i would not say
COM are preferable to dll most of the time. COM adds some (somewhat big)
overhead which may not be interresting.
one thing to notice: coding plugins is ONLY a matter of interface. COM defines
a standard interface, but you are free to use yours. i already worked on a
small project involving plugins in C: a software that was adding funny
movements to your mouse. each kind of movement was implemented in a standard
dll, loaded dynamically at runtime. each plugin was implementing an interface
consisting of 3 functions. those 3 functions were sufficient and using COM
there would have been overkill.
on another scale, taking advantage of the ability to put C++ classes in dlls, i
wrote an application based on modules. here again i defined an interface (a
base class) from which modules derived. the only fancy stuff needed was some
factory functions in each dll (this is a standard design pattern called
Abstract Factory).
you will say that this is exactly what COM does for you, but unfortunately, you
cannot strip down COM to remove what is not interesting for your particular
project. the worst thing to do is trying to use the ATL (Active Template
Library from Microsoft) to code simple COM objects: ATL suffers from a bad
design which stopped me most of the time.
> I find that in most modern serious projects COM (on Windows and starting
> recently for Mac OS X) is in fact being used over a plain dll and in
> particular if you are looking to do plug-ins.
COM is almost always used over a plain dll.
> In fact, on Mac OS X plug-in are also COM in a shared lib just like on
> Windows. COM is more of a spec for plug-ins that can interoperate than a
> distributed object system like CORBA.
that's it: COM is an interface. DCOM is a more refined interface which allows
for distribution.
> There is no reason not to use the COM "spec" in the same way on Linux
> for plug-ins. Take a look at InsideCOM (Microsoft Press) for an
> introduction to COM the spec (it doesn't serve as a good intro to COM on
> Windows incidentally) The GNATCOM framework though would need a little
> bit of work though to make it really viable though for use on Linux, but
> is very reasonably doable.
I already read "Inside OLE" some years ago... (for those interested: "Inside
OLE", 2nd edition, is given in an alectronic format with the MSDN library for
Visual Studio 6)
> GNATCOM of course :-) as he pointed out. http://www.gnavi.org/gnatcom
shortly after i posted it, i made a search on AdaPower.com and found it.
--
rien
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-12 0:00 ` David Botton
@ 2004-11-12 18:17 ` Pascal Obry
0 siblings, 0 replies; 13+ messages in thread
From: Pascal Obry @ 2004-11-12 18:17 UTC (permalink / raw)
David Botton <david@botton.com> writes:
> GNAT has had no problems with DLLs already for many versions prior.
Yep, but it was easy using gnatdll... With recent versions of GNAT you can
either use a project file to build the DLL or simply a "gcc -shared" command
(as done on UNIXes).
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-12 9:53 ` Adrien Plisson
@ 2004-11-14 3:38 ` David Botton
0 siblings, 0 replies; 13+ messages in thread
From: David Botton @ 2004-11-14 3:38 UTC (permalink / raw)
On 2004-11-12 04:53:03 -0500, Adrien Plisson
<aplisson-news@stochastique.net> said:
>
> you're right, COM is not equivalent to corba, but DCOM is. but i would
> not say COM are preferable to dll most of the time. COM adds some
> (somewhat big) overhead which may not be interresting.
Actually it is very light, in particular if your are doing inproc.
>
>
> you will say that this is exactly what COM does for you, but
> unfortunately, you cannot strip down COM to remove what is not
> interesting for your particular project. the worst thing to do is
> trying to use the ATL (Active Template Library from Microsoft) to code
> simple COM objects: ATL suffers from a bad design which stopped me most
> of the time.
That is why I write my COM in straight C++ or Ada and do not use ATL or
MFC for COM. It is actually simple and fairly lightweight once you get
to its heart.
David Botton
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Plugins/Dynamic Libraries
2004-11-10 20:46 Plugins/Dynamic Libraries Andrew W
2004-11-11 8:28 ` Martin Krischik
2004-11-11 10:34 ` Adrien Plisson
@ 2004-12-04 14:27 ` Lionel Draghi
2 siblings, 0 replies; 13+ messages in thread
From: Lionel Draghi @ 2004-12-04 14:27 UTC (permalink / raw)
Andrew W a ï¿œcrit :
> Greetings All,
>
> I am starting work on a plug in / dynamic library project with ADA and just
> wanted to see if I had missed anything. I understand that this is very
> compiler and OS dependent.
I don't know if it's still available somewhere on the net (or even if
it's relevant), but the winner of the Ada-France 2001 contest was a
project named AdaPlugins, from Franᅵois Godmᅵ.
(http://www.ada-france.org/article11.html).
You may try to google it.
--
Lionel Draghi
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2004-12-04 14:27 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-11-10 20:46 Plugins/Dynamic Libraries Andrew W
2004-11-11 8:28 ` Martin Krischik
2004-11-11 10:49 ` Adrien Plisson
2004-11-11 12:42 ` Frank Piron
2004-11-11 13:59 ` Martin Krischik
2004-11-11 16:16 ` Pascal Obry
2004-11-12 0:00 ` David Botton
2004-11-12 18:17 ` Pascal Obry
2004-11-11 10:34 ` Adrien Plisson
2004-11-12 0:12 ` David Botton
2004-11-12 9:53 ` Adrien Plisson
2004-11-14 3:38 ` David Botton
2004-12-04 14:27 ` Lionel Draghi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox