[Mono-osx] [ANN] mcocoa 0.4 and mobjc 0.5
jesjones at mindspring.com
Wed Jan 21 03:35:29 EST 2009
mcocoa provides C# wrappers around nearly all of Apple's Foundation
and AppKit frameworks. mobc is a bridge between Mono and Objective-C.
Together these libraries allow you to write Cocoa applications using
Mono. Unlike most other libraries mobjc properly handles exceptions
arising in both managed and native code.
The libraries can be found at <http://code.google.com/p/mcocoa/> and <http://code.google.com/p/mobjc/
Changes to mcocoa include:
* Methods with native NSError ** arguments are now generated using out
NSError instead of IntPtr. Ditto for NSRange ** and NSStringEncoding **.
* Generated code uses NSString instead of System.String.
* Generated method names use underscores instead of case changes (e.g.
initWithDomain_code_userInfo instead of initWithDomainCodeUserInfo).
* Generated classes now define Retain instead of retain so that
exported classes can define their own Retain methods (to support
covaraint returns) without causing the Registrar to think that those
types are overriding retain.
* Generated classes now have Alloc instead of alloc methods (so the
API is more consistent).
* Added an overload of NSApplication::Create to make it easier for
clients to extend the Debug menu.
* Added some Create overloads to make mcocoa easier to use with apps
which have custom NSApplication subclasses.
* Added a custom NSWindowController to make custom window controllers
easier to create.
* Added alert and path functions.
* Added a bunch more Enums and Externs.
* Fixed some leaks where HGlobals were not being freed.
* Added usage notes to the README.
Changes to mobjc include:
* Methods that start with a lower case letter are now automagically
registered with Cocoa.
* Cache the buffers used by libffi. This aproximately doubles the
speed of the slow path.
* The ivar setter now releases the old value and retains the new value.
* Renamed NSObject::CreateNative AllocNative because the caller
assumes ownership of the result.
* Removed NSObject::Create (there's no real point to this method
because it just created an instance of the root NSObject).
* Added NSObject::Retain to allow clients to retain objects with
covariant returns (mcocoa used to declare retain methods for this, but
that caused problems with exported types because the Registrar thought
the types were overriding retain).
* Added a static NSObject::Class property to return the root NSObject
class (and to be consistent with the NSObject derived classes in
* Cleaned up pointer marshaling:
- If the native type is a char* or a unichar* you now must pass
in null or an IntPtr: System.String will no longer be auto-marshaled
to or from const char buffers.
- There is no longer a special case for float arrays: instead
higher level code must pass in an IntPtr.
- Marshaling of arbitrary arrays and of unions should work (as
long as you pass in null or an IntPtr).
* Cleaned up struct marshaling:
- There is now a better exception if null is passed in.
- An exception is now thrown if the managed and native structs do
* If an exception is thrown while trying to register an exported
method Registrar will now include the class and method name in the
* Fixed the NSObject IntPtr conversion operator so that it works with
* Fixed the To method so it no longer sometimes throws a NRE and has a
better exception message for one of the cases.
More information about the Mono-osx