[Mono-dev] MonoBind - C++ bindings library [include Mono Patch]
Paolo Molaro
lupus at ximian.com
Tue Apr 3 06:31:04 EDT 2007
On 03/28/07 virgile.bello at free.fr wrote:
> As I worked on a C++ binding library for mono, very close to
> boost::python/luabind syntax, I had few minor modification to do in Mono
> sources. The patch is attached.
>
> I was wondering if it was possible to include them in mono.
> The missing thing was the possibility to bind a pointer argument to an internal
> call. It is required in order to make all the C++ wrapper/proxy statically
> linked through template metaprogramming.
[...]
> Later, I would like the registration code to auto-generate C# header.
I think auto-generation is the only option, unless this is supposed to
be used for very few classes.
Anyway, I took a look at the code, but I don't see a reason why the core
of mono would need changes for this, you can do it all without any
mono changes.
What you basically are doing is that, given a icall method declaration,
to actually call a function with a different signature. Why not use the
correct signature in the first place?
[C code (or C-representation of the C++ ABI?)]
void icall (void *this_ptr, void *hidden_arg, int a);
[Old C# code: mono core changes needed because the signature is incorrect]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern public void Test (int a);
[New C# code: no core mono changes needed]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern void Test (IntPtr hidden_arg, int a);
static readonly IntPtr Test_hidden_arg;
public void Test (int a) {
Test (Test_hidden_arg, a);
}
And you will initialize Test_hidden_arg as part of the binding startup
code with the embedding API or even with an icall in C#:
static readonly IntPtr Test_hidden_arg = MonoBind.CreateSig ("vi");
where "vi" means void for the return type and i is the first argument of
type int, though there are also other options, like (using params arrays):
static readonly IntPtr Test_hidden_arg = MonoBind.CreateSig (null, typeof (int));
This makes it much more flexible and also much easier to deal with if
you automatically generate the C# side.
lupus
--
-----------------------------------------------------------------
lupus at debian.org debian/rules
lupus at ximian.com Monkeys do it better
More information about the Mono-devel-list
mailing list