[fpc-pascal]Mapping Object Pascal Classes to C++ Classes
memsom at interalpha.co.uk
memsom at interalpha.co.uk
Wed Nov 13 17:50:34 CET 2002
> I don't think so. I guess it works only because Borland C++ is used and
> Delphi and BC++ use the same back end and probably a similiar VMT generation.
I think it's the way Delphi is implemented. It also works when the DLL is
compiled with MinGW, which certainly isn't Borland compatible in the same way
as BC++ is. I just tested it. Further, the C++ class doesn't have to be
abstract as Rudy suggests, because I altered it to return the 'TestClass' in my
example, and it still works.
> Further, these methods are limited: no multiple inheritance, no exceptions
> etc.. Its use depends on what you want to do.
If you write C++ reserving Multiple Inheritence for extremes, this shouldn't be
a problem. However, in truth, you're right. Many C++ programmers get lost in
the wonders of multiple inheritence. Surely Exceptions could be handled in some
way? a simple mapping in the same manour, and some glue code to 'catch' the
exception and pass it to Pascal if it is unhandled in C++.
> Afaik you're one of the BeFPC people, right?
Yeah, except I'm on hiatus from that project. There are two French guys leading
up at the moment, and they are wrapping the API directly with a different
approach to that I started with. I want to wrap the API in a VCL/LCL style
using a flattened universal API. This will get picked up at some point in the
new year. The groundwork is there, but I have to make it more generic.
> If you want a clean mapping of
> the gui classses from C++ to pascal, we can talk about C++ classes support in
> FPC 1.1. The question is whether it is possible, it depends on the involved
> C++ language features.
I think it would be cool if FPC does it on this level, with some 'behind the
scenes' glue code to pad out the problems you've noted above. I think it works
for Delphi because Borland altered the VMT to mimic that of C++ on the Windows
platform to enable COM to work (For Delphi 2 before interfaces existed.)
> E.g. if exceptions are used, things get rather complicated. In this
> case I would suggest to modify h2pas to eat C++ and create wrappers as
> usual which do the exception conversion.
The other guys have written a class mapper of sorts. I haven't really been
keeping up with them. The only reason I stumbled onto this article was that I
was looking into an automated C++ class flattener to help me use Muscle in
Delphi (http://www.lcscanada.com/muscle/index.html). As muscle will compile
using BC++ 5.5.1, I can probably map most of it using this technique.
Supporting FPC would be cool too.
Anyway, with the new GCC3.x 'universal' ABI, shouldn't it all become a bit
easier soon? :-)
This message was sent using Mistral WebMail.
More information about the fpc-pascal