[Mono-list] Using P/Invoke
Nigel Benns
nigel_benns@rogers.com
Fri, 8 Apr 2005 10:59:12 -0400 (EDT)
Maybe... weird... I'll have to update mono and find out if my code still
works :)
Its been a while since I've looked at it.
> When trying your alternative base.Raw code, I get an error from mcs
> stating that I can't change the access modifiers on base.Raw. So either
> way get/set will work. I guess I should just stick with explicitly
> setting base.Raw?
>
> Using Mono 1.1.6. Maybe this was allowed in 1.0.x?
>
> --Aaron
>
> On Fri, 2005-04-08 at 10:27 -0400, Nigel Benns wrote:
>> It looks pretty good to me :)
>>
>> I wouldn't use "/usr/lib/libgimpwidgets-2.0" in the DLLImport field
>> though.
>> Use either "libgimpwidgets-2.0" or "gimpwidgets" may work as well. It
>> will make it more portable, so that it works on windows.
>>
>> I don't think I would use base.Raw either, but you might want to ask
>> someone else on this. When doing EFL-Sharp, I've been overriding Raw
>> for
>> the class, and having it setup an IntPtr within the class. That way I
>> can
>> control that its only a "get" operation (I can't see a reason to set
>> it),
>> and I can use a HandleRef instead to make sure nothing inadvertantly
>> gets
>> GC'ed before the class is finalized.
>>
>> public class GimpColorButton : Button
>> {
>> [DllImport("libgimpwidgets-2.0")]
>> static extern IntPtr gimp_color_button_new();
>>
>> HandleRef realWidget;
>>
>> public GimpColorButton() : base(IntPtr.Zero)
>> {
>> realWidget = new HandleRef(this,
>> gimp_color_button_new());
>> }
>>
>> public override IntPtr Raw
>> {
>>
>> get {
>>
>> return this.realWidget.Handle;
>>
>> }
>>
>> }
>>
>> ~GimpColorButton()
>> {
>> Dispose();
>> }
>> }
>>
>>
>> > Hello, one area I haven't had much practice in with Mono is P/Invoke.
>> I
>> > am trying to import a function from libgimp, so I can use a custom GTK
>> > widget in the library.
>> >
>> > Here is what I've tried:
>> >
>> > using System;
>> > using System.Runtime.InteropServices;
>> > using Gtk;
>> > using GLib;
>> >
>> > public class GimpColorButton : Button
>> > {
>> > [DllImport("/usr/lib/libgimpwidgets-2.0")]
>> > static extern IntPtr gimp_color_button_new();
>> >
>> > public GimpColorButton() : base(IntPtr.Zero)
>> > {
>> > base.Raw = gimp_color_button_new();
>> > }
>> >
>> > ~GimpColorButton()
>> > {
>> > Dispose();
>> > }
>> > }
>> >
>> > ...
>> >
>> > Widget colorButton = new GimpColorButton();
>> >
>> > As for the actual Gimp Library, I think maybe multiple libraries have
>> to
>> > be loaded (libgimpcolor, libgimpui, etc.) So maybe I should write a
>> > wrapper C library that links in all the Gimp libraries, and then
>> import
>> > that library into the C#? Regardless of the C library in question, is
>> > the C# above on the right track?
>> >
>> > Thanks!
>> >
>> > --Aaron Bockover
>> >
>> >
>> > _______________________________________________
>> > Mono-list maillist - Mono-list@lists.ximian.com
>> > http://lists.ximian.com/mailman/listinfo/mono-list
>> >
>>
>> _______________________________________________
>> Mono-list maillist - Mono-list@lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-list
>>
>>
>
> _______________________________________________
> Mono-list maillist - Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>