[Mono-osx] MonoMac: ClassHandle issue

Miguel de Icaza miguel at novell.com
Sat Jul 10 12:14:29 EDT 2010


Hello Geoff,

     I did not pay close enough attention to the sample.   I  was thinking
that he was doing "myViewController.GetType ()" and not messing with the
internals.

Miguel.

On Sat, Jul 10, 2010 at 12:09 PM, Geoff Norton <GNorton at novell.com> wrote:

> 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/255b6872/attachment.html 


More information about the Mono-osx mailing list