[Mono-list] Re: Calling back from unmanaged code to managed code.

Nigel Benns nigel_benns@rogers.com
Thu, 16 Dec 2004 13:32:19 -0500 (EST)


Ok, this is a little different, I think anyway,
mabey I just don't have it in my head right, so I'll give the example I'm
working on.

I'm trying to bind EWL (Enlightenment Widget Library) to C#.

I've got the windows working, but no events.
I've read your email... seems easy enough, but I think it does it a little
different.

Here is a C example to do a DeleteEvent:

void delete_cb(Ewl_Widget *w, void *event, void *data) {
    ewl_widget_destroy(w);
    ewl_main_quit();
}

int main(int argc, char **argv) {
   ewl_init();
   ...
   win = ewl_window_new();
   ...
   /*Where this function appends the callback to a calback list read
     by ewl_main().
   */
   ewl_callback_append(win, EWL_CALLBACK_DELETE_WINDOW, delete_cb, NULL);
   /*The NULL is for the Data to pass */
   ...
   ewl_main();
}

Ok, so what I'm trying figure out is how to add the ewl_callback_append as
a delegate in C#.

It doesn't seem write to me that I could pass a C# function to C, even if
I could figure out how to do that?

Is that where I need to add the "glue", or is this different.

my C# Lib looks kinda like this:

namespace Ewl {

   public class Window : Embed {

      IntPtr Handle;

      public override IntPtr Raw {

         get {

            return Handle;

         }

      }

      //I'm guessing I can't do this
      [DllImport("libewl")]
      static extern int ewl_callback_append(IntPtr wid, CallType
CallType.DeleteEvent, //however you would give a function?)


   }


Any one with a suggestion on this would be GREATLY appreciated.
Thanks


I REALLY HATE C, it makes my head hurt, and managed code to C is even
worse :).  But the challenge is half the reason I'm doing this.