Michael brought up some points about the incremental building that
started getting me thinking about C++ & COM in general and how it
fits/will fit into gradle.

COM in C++ manifests in manners that are quite different than standard
library development.
(COM can technically be used in plain C, but it's more cumbersome and
generally not recommended)
(COM in C# follows standard behaviours like other libraries, but
that's a different topic for the future)

Creating C++ COM (type) libraries:
This is most typically started from .idl files [1] (which can include
other COM libraries as part of referencing/derivation)
the midl.exe utility [2] (usually) creates a .c, a .h, and a .tlb file
The .c and .h files are for implementing the library and the .tlb file
is the 'public' API that gets published/referenced by other code.

There are some cases where the .tlb is unnecessary, such as when
making an Add-on to some other application that has an established
'API contract' to interact with the library being created.

Due to midl generating .c and .h files, doing this in the Visual
Studio IDE becomes a bit odd as you include a .c file into the source
compilation when it may not be there.
However, Visual Studio also prioritizes .idl files and processes them
before most other code, to prevent the potential of the .c and .h file
being missing when being used in other code.


Using COM (type) libraries:
Traditional C/C++ dependencies are _linked_ against with shared or
static libraries.
COM libraries are handled in the _compile_ phase via the #import
directive in the source code [3]
In summary of the MSDN article, the #import directive is a relative
powerful directive being capable of being used on a few different file
types (such as .dll, .tlb. and .olb).
#import can also however, directly go into the Windows registry and
start pulling information out of it (such as with the libid: and
progid: forms).
#import generates a .tlh file, and depending on the library contents,
a .tli can also be generated (and is automatically included by the
.tlh in this scenario)
- compiler interpretation-wise, the #import declarative is replaced by
an #include declarative for the generated .tlh file.


All in all, COM in C++ adds some amount of complexity to the overall
process and paradigm. Affecting pieces such as
* incremental building
* dependency management
* publishing

At work we have a heavy involvement with COM, from a number of the
applications we need to interact with having COM-based APIs (primarily
CAD Applications), so the handling of COM in C++ is rather important
to us.

Has gradle already started any thinking about COM and how it'll fit
into the native toolchain (C++) support?

Thanks,
Steven.

[1] 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa367091(v=vs.85).aspx
[2] 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa367300(v=vs.85).aspx
[3] http://msdn.microsoft.com/en-us/library/vstudio/8etzzkb6(v=vs.100).aspx

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to