From: Laurent Guerby <[log in to unmask]>
> It is important to understand that it is not a language issue (*),
> but a specific compiler/system issue. On NT, and for C++ in
> general, there is no standard object format. Most of the time, you
> cannot mix objects produced from 2 different C++ compilers, and
> even if you could, it is unlikely to work because the 2 C++
> runtimes probably won't work together. The situation is the same
> between 2 Ada compilers (*).
I beg to disagree: the codeview format as used by MSVC++ is pretty much a de
facto standard for NT. Furthermore there's always the DLL approach
available for language interoperability.
> If you are in a multi-language project, it is in general better to
> avoid mixing languages in the same executable.
Provided the Ada compiler has adainit and adafinal available for elaboration
prior to calls into Ada from C/C++ this is not a major problem, though I
generally recommend the DLL approach.
> It is far better (much less risk, less headaches) to separate the 2
> parts, and to use either a C-level interface, and/or some system
> interprocess communication (pipes, shared memory, messages,
> This generally has also a good impact on the application design,
> since it enforces subsystem boundaries. (Eg: avoiding to have GUI
> code spreaded all over the place in your code.)
> So to answer your question: at the language level (Ada 95 and C++)
> there's nothing that guarantee that it will work, experience
> indicates that it won't work.
The "won't work" tends to be mainly in the area of inheritance across the
language boundary. Most other issues are pretty workable.
> Unless of course you can find a particular Ada 95 compiler that was
> designed with cohabitating with a particular C++ runtime.
>(*) Note that Ada 95, with Import, Export and Convention pragmas plus
> the adainit/adafinal implementation advice makes it easier to
> integrate other languages. I worked on a project where some of the
> code was compiled with the Sun C++ compiler and the rest with
> GNAT, we defined a C-level interface between the two parts, and
> linked with the C++ compiler linker calling adainit/adafinal from
> the C++ main and things worked fine (Motif, Ada tasking and C
> threading were there too, and it wasn't an academic example).
We have many customers using the two languages together on Win 95 and NT.
So, our experience differs.
- Ed Falis