[Mono-osx] MonoMac: ClassHandle issue

Geoff Norton gnorton at novell.com
Sat Jul 10 12:09:34 EDT 2010


Actually no, the issue here is he's using ClassHandle in a way that isn't supported.  ClassHandle is used internally in the bindings to figure out if we're a direct binding or not to do appropriate dispatch, it is NOT analogous to [self class];  If you want [self class] you can do
Messaging.intptr_objc_msgSend (this.Handle, Selector.GetHandle ("class"))

Maybe we should expose this in a seperate property?

-g

On 2010-07-10, at 11:56 AM, Miguel de Icaza wrote:

> Hello Duane,
> 
>     Are you referencing monomac.dll, or are you compiling all its source code directly into your app?
> 
>     This problem happens if you try to put the MonoMac source code into your project, instead of keeping it as a separate assembly.
> 
> Miguel
> 
> On Sat, Jul 10, 2010 at 10:04 AM, Duane Wandless <duane at wandless.net> wrote:
> Here is a test case that shows the same issue I have with an Obj-C object.  In my real app the MyViewController object is created in obj-c.  But this test case shows the same issue.
> 
> using System;
> using MonoMac.Foundation;
> using MonoMac.AppKit;
> using MonoMac.ObjCRuntime;
> 
> namespace monoMain
> {
>     public class myApp
>     {
>         public static void Main()
>         {
>                 NSApplication.Init();
>                 MyViewController sv = new MyViewController();
>                 Console.WriteLine("class handle {0}", sv.ClassHandle.ToString("x"));
>                 Console.WriteLine("class name {0}", new Class(sv.ClassHandle).Name);
>                 Class kls = new Class("MyViewController");
>                 Console.WriteLine("kls handle {0}", kls.Handle.ToString("x"));
>                 Console.WriteLine("kls name {0}", kls.Name);
>         }
>     }
> 
>     [Register("MyViewController")]
>     public class MyViewController : NSViewController
>     {
>         public MyViewController()  { }
>     }
> }
> 
> 
> In the output I get:
> class handle a0625e70
> class name NSViewController
> kls handle d5dbc0
> kls name MyViewController
> 
> The desired output is to have MyViewController returned in both cases.  If I use NSView as the class it does work as expected.
> 
> I modified Class.cs to print out additional info:
> Registering MyViewController : NSViewController / 0xa0625e70 0xd5dbc0
> Console.WriteLine ("Registering {0} : {1} / 0x{2} 0x{3}", name, parent_name, parent.ToString("x"), handle.ToString("x"));
> 
> So when the MyViewController is created it appears that its ClassHandle is incorrectly set to its super class handle.  I did take it a step further and created MyViewController2 : MyViewController.  And when sv.ClassHandle is printed out it is NSViewController's handle.
> 
> Thanks,
> Duane
> 
> 
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx
> 
> 
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-osx/attachments/20100710/1c65b6f1/attachment-0001.html 


More information about the Mono-osx mailing list