I'm working on bindings for a gobject-based library that has a bunch of classes 
with constructors of the form:

some_library_object_new(gdouble param1, gdouble param2, ...) {
  /* whatever */
}

where param1 and param2 are required parameters, and the ellipsis is to be 
replaced by the caller with an arbitrary number of key/value pairs to be used 
to fill in other, optional properties of the object, followed by a null (they 
use g_object_set_valist).  Obviously, C# doesn't support methods of this kind, 
and since all of the properties that can be specified from the constructor are 
also accessible as properties that can be set later, I'm content to just leave 
the arguments after the required ones out of the bindings.

So, I need the bound constructor to come out as follows:

[DllImport("some_library.dll")]
static extern IntPtr some_library_asdf_new(double param1, double param2, IntPtr 
terminator);

public Asdf (double param1, double param2) : base (IntPtr.Zero)
{
        if (GetType () != typeof (Asdf)) {
                throw new InvalidOperationException ("Can't override this 
constructor.");
        }
        Raw = some_library_asdf_new(param1, param2, IntPtr.Zero);
}

that is to say, the wrapped C function needs to have an extra parameter, and 
rather than being exposed via the C# method, a null value always needs to be 
passed into the C function from the wrapping constructor.

So, my question: this occurs in a whole bunch of classes in the library.  I 
know I can use the gapi2 fixer program to strip the constructors out of all of 
these classes, and use .custom files to hand-code new constructors for each 
one, but I'd rather not.  Is there some way I can make gapi2 generate code with 
this behavior?

Andrew
_______________________________________________
Gtk-sharp-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

Reply via email to