[Mono-dev] C++ wrapper ?
William S Fulton
wsf at fultondesigns.co.uk
Sun Sep 4 04:17:06 EDT 2005
ivar at imaker.no wrote:
> Hello,
> If I want to wrap a c++ class library what should I do ?
> For me it seems like I have to do the following:
> 1. Make a ANSI c interface file calling the C++ functions, interfacefile_1
> 2. use csharps DLLImport directive making a wrapper class i csharp,
> interfacefile_2
>
> But then I have still two problems
> I. A lot of arguments and return values are of C++ std template types,
> like vector, string etc.
> II. I must create the object in c++ before I can start to use it.
>
> A solution to both I and II is to make a simpler interface in C++ and
> adding a init function whichs creates the original object when called,
> interfacefile_3
> ?
>
> So then the call stack looks like:
> C++ class I want to use
> C++ wrapper to simplify arguments, and to add a functrion for creation of
> original class
> c wrapper to become compatible with the c# DLL import directive
> a c# wrapper using DLL import
>
> I know it is possible to skip c wrapper file and using the callnames of
> c++, but since this is not compiler independent I prefer not to do it
> this way.
>
> So my question is: Is there no easier way to interface to c++ code ?
> Had it only been one class I think I could have used swig, but I donæt see
> how I can use swig when I have many C++ classes.
I use SWIG to wrap hundreds of classes, SWIG comes into its own when
wrapping many C++ classes as it does all the repetitive code generation
for you and has support for std::string and std::vector. When wrapping
one or two small classes, I'd argue it would be easier to do this by
hand than get familiar with SWIG. If you need any help wrapping more
than one class, please ask on the SWIG mailing list
(http://www.swig.org/mail.html) or take a look at the examples shipped
with SWIG.
William
More information about the Mono-devel-list
mailing list