[Mono-list] Can I call c# code from c code?
Miguel de Icaza
miguel at novell.com
Wed Feb 14 14:43:26 EST 2007
Hello,
> I have a large C# project that runs under Windows and makes use of C-DLLs that have callbacks into the C# code.
>
> I am trying to figure out if it's possible to port all of this to
> mono. I understand how to call C code from C# and how to embed the
> mono runtime in C code, but I don't see a way to do what I need
> without embedding mono.
There is a simple way. Lets say that your C code needs to call this
function in C#:
class Dingus { void DoDingus (int operation); }
So you define this in C#:
delegate void MyCallback (int operation);
Then you create a delegate of this type:
Dingus d = new Dingus ();
MyCallback do_dingus_callback = new MyCallback (d.DoDingus);
So now you have a delegate that you can use to call DoDingus from C#
that would be:
do_dingus_callback (10);
That would call `d.DoDingus' with the parameter 10.
You are not limited to calling instance methods, it could be a static
method.
Now, you need to pass this delegate to the unmanaged world, like this:
[DllImport ("...")]
extern static void Native_Code_Do_Something (MyCallback cback);
...
Native_Code_Do_Something (do_dingus_callback)
In C, you then write:
typedef void (*callback)(int op)
void Native_Code_Do_Something (callback cb)
{
cb (10);
}
Miguel
More information about the Mono-list
mailing list