[Mono-list] Mono with other languages
Jonathan Pryor
jonpryor at vt.edu
Mon Feb 11 10:01:49 EST 2008
On Mon, 2008-02-11 at 10:40 +0000, Dan Smithers wrote:
> Jonathan Pryor wrote:
> > So the only real questions are:
> >
> > 1. What language do you want to use?
>
> C++, Python
>
> > 2. Does that language have a compiler that runs on Linux?
>
> several - I would probably use gcc for C++.
gcc doesn't support C++/CLI. Additionally, gcc doesn't (at this time)
support generating IL.
> I suppose I should explain a bit about what I'm trying to achieve.
>
> We have core software developed under Linux, that we are hoping to make
> accessible to Windows developers across a network. We are planning to do
> this using network communication and also by exposing parts of the core
> libraries.
Are these actual C/C++ dynamic (not static) libraries, or C/C++
programs?
If these are dynamic libraries, you can write a C wrapper API, then
use .NET Platform Invoke to write a set of wrapper classes that invoke
the wrapper. Alternatively, you can use SWIG to generate the C and C#
wrappers that would be needed to interact with your C++ API:
http://www.mono-project.com/dllimport
http://www.swig.org
Once the wrapper layer is written & compiled, any managed language will
be able to run against the wrapper layer, and (indirectly) use your
libraries. Examples of this approach include Mono.Posix.dll and Gtk#.
If this is a C/C++ program, you can use Mono's embedding interface so
that your program acts as a host for managed code, and then you can
provide "internal calls" so that managed code can invoke your exported
methods:
http://www.mono-project.com/Embedding_Mono
Second Life is embedding mono to run their scripting engine:
http://blog.secondlife.com/2008/01/29/mono-beta-launch/
http://www.mono-project.com/Scripting_With_Mono
> To do this I want to provide an interface that can be used from Windows
> (i.e. .Net) platforms and implemented in an agnostic way. Mono seems a
> natural choice for this, but I am getting rather frustrated by C#.
The "shared libraries + P/Invoke" approach will work across both Mono
and .NET, while the "embedding mono" approach is tied to Mono.
- Jon
More information about the Mono-list
mailing list