<HTML><HEAD><STYLE media="all" type="text/css">         #sig {                 /* Typography */                 color: black;                 font-size: 9pt;                 font-family: Arial, Verdana, sans-serif;                 background-color: #EEE;                 line-height: 15px;                 margin: 6px 0;                 padding: 6px;                 border-top: 1px #999999 dotted;                 border-bottom: 1px #999999 dotted;         }         #sig .row2 {                                 margin-top: 0px;                 margin-bottom: -8px;         }         #sig .row a:link, #sig .row a:visited {                 color: #164D8F;                 text-decoration: none;                 border-bottom: 1px solid #99B1DB;         }         #sig .row a:hover {                 color: #4C71A8;                 text-decoration: none;         } </STYLE></HEAD><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><BR><DIV><DIV>On Jan 2, 2007, at 5:34 AM, Andreas Färber wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite"><DIV><DIV>No idea, I don't use Dumbarton in my Cocoa app. But even when using Dumbarton you can use the embedding functions of Mono directly like Dumbarton as a wrapper does internally, or if it's missing in Dumbarton patch it in.</DIV><DIV>The initWithMonoObject:NULL above will not lead to success as Mono cannot retrieve a MonoClass* from a NULL reference. Logically I would expect such ObjC messages at a class wrapper, say result = [myClass staticProperty("MyProperty")];</DIV></DIV></BLOCKQUOTE><BR></DIV><DIV>Taking all of this into consideration I have another patch that I have tested with my singleton method, and some other miscellaneous static properties being bridged between Dumbarton and Cocoa.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>This patch adds the following methods to DBMonoObjectRepresentation:</DIV><DIV><BR></DIV><DIV>+ (MonoObject *)invokeStaticMethod:(const char *)methodName withNumArgs:(int)numArgs varArgList:(va_list)va_args;</DIV><DIV>+ (MonoObject *)invokeStaticMethod:(const char *)methodName withNumArgs:(int)numArgs, ...;<BR></DIV><DIV>+ (MonoObject *)getStaticProperty:(const char *)propertyName;</DIV><DIV>+ (void)setStaticProperty:(const char *)propertyName valueObject:(MonoObject *)valueObject;</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>In the singleton example I cited earlier, the following code will properly funnel singleton instantiation through the Instance property in C#:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>+ (SingletonObject *)sharedObject</DIV><DIV>{</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>@synchronized(self)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>{</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>if (instance == nil)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>{</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>MonoObject *obj = [SingletonObject getStaticProperty:"Instance"];</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>instance = [[self alloc] initWithMonoObject:obj];</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>}</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>}</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>return instance;</DIV><DIV>}</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Then elsewhere in my code I can call static methods like:</DIV><DIV>[SingletonObject testPrint]; // test static method to print something via Console.WriteLine</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I'm using Dumbarton with this patch incorporated thus far without any problems. My DBMonoObjectRepresentation follows the Cocoa singleton pattern, as the actual Mono object it represents follows the C# singleton pattern. </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Thanks for the help Andreas!</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Allan (or whomever it may concern) let me know if I need to fix anything or change some patches to allow this to be committed to subversion. I was wondering if I should just be using DBMonoClassRepresentation, but the examples use DBMonoObjectRepresentation, so I have assumed that it is the "defacto standard" for bridging C#-&gt;Cocoa objects</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Cheers</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><SPAN></SPAN></DIV></BODY></HTML>