[Gtk-sharp-list] Need help solving a problem using glade-lib/gtk/etc... app on Windows .Net.

John Luke John Luke <john.luke@gmail.com>
Wed, 25 Aug 2004 13:05:42 -0400

Gtk# with .NET/Windows has a low-level bug that causes most of these errors.
See http://bugzilla.ximian.com/show_bug.cgi?id=61139
It will hopefully be fixed soon.

On Wed, 25 Aug 2004 14:56:58 +0200, Anset <anset@anset.org> wrote:
> Hi,
> Sorry if this email is a bit long, but I wanted to be complete...
> I have written a small program to test gtk-sharp compatibility between linux
> (gentoo) and windows (xp). On the windows side I did not install mono. I
> want to test compatibility between linux/mono and windows/.net.
> To get gtk functionality on the windows pc, I installed the "Gtk# Win32
> Installer for Microsoft .NET Framework 1.1 SDK", which I found at
> http://forge.novell.com/modules/xfmod/project/?gtks-inst4win.
> I used glade-2 to create a gui XML file. The gui is very simple: a text
> label and a few buttons.
> On linux I used monodevelop to compile the program, embedding the xml file
> as a resource. Everything works the way it should. No problems.
> Now I copy the exe file over to my windows box and try to run it.
> I get an unhandled exception. (see below)
> I then compile the program using csc on the windows box. Compilation goes
> without a problem, but when I run the program, I get the same unhandled
> exception (see below).
> I copied the exe I compiled on the windows box with csc over to my linux pc
> and there it runs perfectly.
> Here is the stack trace I get on the windows box. Again, the stack trace is
> identical for both the mcs and csc compiled exe's:
> Unhandled Exception: System.ArgumentNullException: Key cannot be null.
> Parameter name: key
>    at System.Collections.Hashtable.ContainsKey(Object key)
>    at GLib.ObjectManager.GetValidParentType(IntPtr raw)
>    at GLib.ObjectManager.CreateObject(IntPtr raw)
>    at GLib.Object.GetObject(IntPtr o, Boolean owned_ref)
>    at GLib.Object.GetObject(IntPtr o)
>    at Glade.XML.GetWidget(String name)
>    at Glade.XML.BindFields(Object target, Type type)
>    at Glade.XML.Autoconnect(Object handler)
>    at gtk_hello_world..ctor(String[] args)
>    at gtk_hello_world.Main(String[] args)
> I have done some digging and came to the following procedure in the
> gtk-sharp/glib/ObjectManager.cs file
> (from cvs.hispalinux.es):
> static Type GetValidParentType (IntPtr raw)
> {
>    int type_id = gtksharp_get_type_id (raw);
>    string typename;
>    string mangled;
>    Type t;
>    // We will always end up at GObject and will break this loop
>    while (true) {
>          type_id = gtksharp_get_parent_type (type_id);
>          typename = Marshal.PtrToStringAnsi (gtksharp_get_type_name_for_id
> (type_id));
>          if (types.ContainsKey (typename))
>             mangled = (string)types[typename];
>          else
>             mangled = GetExpected (typename);
>          t = Type.GetType (mangled);
>          if (t != null) {
>             return t;
>          }
>    }
> }
> The first "if" statement makes the call to ContainsKey which (as far as I
> was able to deduce) causes the unhandled exception.
> Now the argument that is "null" is "typename". This variable gets its value
> with the call just above that line:
> typename = Marshal.PtrToStringAnsi (gtksharp_get_type_name_for_id
> (type_id));
> I was not able to find details about the gtksharp_get_type_name_for_id
> function. (or more precisely the g_type_name function that is called by it).
> :(
> What puzzles me here is that Marshal.PtrToStringAnsi apparantly returns
> "null"... Reading the description in the documentation,
> Marshal.PtrToStringAnsi will trow an exception if its argument is null, so
> whatever gtksharp_get_type_name_for_id (type_id) is returning, it is not
> "null". From what I have found on the net, Marshal.PtrToStringAnsi should
> not return "null"...
> So what happened inside Marshal.PtrToStringAnsi?
> And only on the windows .net platform?
> This is where I am stuck.
> I cannot imagine that gtk-sharp on windows is this broken. So I must be
> doing something wrong.
> But I'm unable to figure this out...
> If anyone can help, I would greatly appreciate it.
> All the files I used can be found at http://anset.org/gtk-problem
> I put a readme file with info on what file does what (just in case).
> Best regards and thank you for your time,
> Anset.
> _______________________________________________
> Gtk-sharp-list maillist  -  Gtk-sharp-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/gtk-sharp-list