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

Francisco T. Martinez martinf@mfconsulting.com
Wed, 25 Aug 2004 12:55:03 -0500


As John pointed out this should be fix in the near future.  For now, I 
would recommend that you double check the steps in the included Glade# 
Quick start tutorial.  Please pay particular attention at the items 
being discussed after Figure 3:

- Check your Application's default Namespace

- Insure that your Gtk# related assembly references are set to copy 
local.  In other words, that they live side by side (in the same 
directory) the executable or library output module you are producing.

Paco


John Luke wrote:

>Hello,
>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
>>
>>    
>>
>_______________________________________________
>Gtk-sharp-list maillist  -  Gtk-sharp-list@lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
>  
>