comp.lang.ada
 help / color / mirror / Atom feed
From: Adrien Plisson <aplisson-news@stochastique.net>
Subject: Re: Plugins/Dynamic Libraries
Date: Fri, 12 Nov 2004 10:53:03 +0100
Date: 2004-11-12T10:53:03+01:00	[thread overview]
Message-ID: <41948730$0$9747$ba620e4c@news.skynet.be> (raw)
In-Reply-To: <2004111119124350073%david@bottoncom>

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



  reply	other threads:[~2004-11-12  9:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2004-11-14  3:38       ` David Botton
2004-12-04 14:27 ` Lionel Draghi
replies disabled

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