Problems with empty Arrays and Dicts in untyped languages
Joe Shaw
joeshaw at novell.com
Thu Jul 28 05:52:03 EST 2005
On Wed, 2005-07-27 at 15:31 -0400, Colin Walters wrote:
> Joe, can you give some sample code for receiving arrays with Mono? Does
> the caller specify what type of array/dictionary they're expecting to
> receive?
Sheesh, you're going to make me work?
Here's the code which demarshals an array:
int elementTypeCode = dbus_message_iter_get_element_type (iter);
dbus_message_iter_recurse (iter, arrayIter);
this.elementType = (Type) Arguments.DBusTypes [(char) elementTypeCode];
elements = new ArrayList ();
if (dbus_message_iter_get_arg_type (arrayIter) != 0) {
do {
object [] pars = new Object[2];
pars[0] = arrayIter;
pars[1] = service;
DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
elements.Add(dbusType);
} while (dbus_message_iter_next(arrayIter));
}
Later an array of elementType is instantiated and the objects in
elements are copied into it. If elementType becomes a new EMPTY_ARRAY,
there's no easy way for us to map this to what the user is expecting.
The mono bindings pretty heavily rely on emitting IL, which makes it
kind of hard to follow and a little gross to use.
Joe
More information about the dbus
mailing list