[Mono-dev] sigc++ signal C# wraper and monoBot Studio
buhochileno at gmail.com
buhochileno at gmail.com
Wed Oct 31 12:10:34 EDT 2007
Hi Jon:
Thanks for all your help and patience Master :-), my WebCamOrbit wrapper
test now work perfectly I learn so much this couple of days, so please
let me know if I can help you with anything , now I'm going to begin the
real implementation...
In our University whe have a couple of PC (notebook acctually) robot
plataforms (built by us), all in linux with a lote of sensors (vision,
gyroscope, sonar, etc). But all HW driver are in pure C and with a bad
comunication system with the higher libraries (shared memory to put and
read values).
So, with this C++ approach we can rebuild all drivers with a better
message system for the higher programmers libraries. I know that is
someway possible to access HW from mono/.net, but for efficency is
better to have the software related to the hardware at low level as posible.
And the reason to also have C# wrappers is becouse we started to work in
a "visual robotic" software for mono and opensource community, is
something like Visual Robotics .NET from Microsoft, but in this case for
mono and offcourse opensource, we allready have the "3D world designer"
(this work pretty much like a windows form designer, you can put in your
world robotic kits, sensors, walls, etc, and organize they behavior;
something like: at 3PM read the heat sensor and take a picture and send
me mail, or move the robot to that position; in a "design" way), as in
the windows designer paradig, all the design is traslated to code and
then the code is passed to the robot for the real execution (you can
also run the code in a simulated environment). Also right now we are
working and moving fast in the "code generation" part and in the main
application (to select a object from the world and see/change
properties, add actions to a event handler, etc).
So this is a very interesting proyect that can be improved a lote with
all the stuff that you tech me, so thank again Jon.
Greeting, Mauricio
Jonathan Pryor wrote:
> On Tue, 2007-10-30 at 20:14 -0300, buhochileno at gmail.com wrote:
>
>> Hi Jon, me again sorry, after implement the example code that you send
>> me, I try to apply the learned stuf to my WebCamOrbit class, so I add
>> the following:
>>
>> extern "C" void* CreateWebCamOrbit ()
>> { return new WebCamOrbit ();
>> }
>> typedef void (*OnMoveHandler) (int , int); //Not necesary right??
>>
>
> No, this is still necessary.
>
>
>> //the following is not right....
>> extern "C" void WebCamOrbit_AddOnMove (WebCamOrbit* wcOrbit,
>> WebCamOrbit::type_OnMove& handler)
>>
>
> Should be:
>
> OnMoveHandler handler
>
> WebCamOrbit::type_OnMove is the sigc++ type of this signal. `handler'
> needs to be a C type (as .NET Marshaling doesn't do C++ marshaling), as
> that's what the Mono marshaler will be providing.
>
>
>> { wcOrbit.OnMove().connect(sigc::mem_fun(wcOrbit, handler)); //I lost
>> here
>> }
>> I lost in the "connect" call, becouse I need to pass the managed object
>> and a pointer to the managed object method?, or do you recomend only use
>> ptr_fun? or obviously there is another way to do it that I miss?.
>>
>
> Only use ptr_fun. You don't need to worry about separate object &
> method pointers, as a delegate implicitly references *both* an object
> and the method to invoke on the object.
>
> For example:
>
> // C#
> delegate string StringCreator ();
>
> object o = 42;
> StringCreator sc = o.ToString;
> string s = sc ();
>
> The `sc' creation line causes *both* the object `o' *and* the method
> System.Int32.ToString() to be referenced by the delegate `sc', so that
> when `sc' is invoked, it'll invoke `o.ToString()'.
>
> Consequently, your C++ code doesn't need to worry about separate object
> & method pointer issues, as Mono's delegate marshaler will handle it for
> you.
>
> - Jon
>
>
>
>
More information about the Mono-devel-list
mailing list