Этот файл содержит невидимые символы Юникода, которые могут быть отображены не так, как показано ниже. Если это намеренно, можете спокойно проигнорировать это предупреждение. Используйте кнопку Экранировать, чтобы показать скрытые символы.
// README
// Dumbarton
//
// Copyright (C) 2006 imeem, inc. All rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
Overview
--------
Dumbarton is an Objective-C framework that works as an interface into the Mono
C API for embedding. Functionally, it works like an ObjC<->C# language bridge.
It was originally written in order to bring imeem (http://www.imeem.com) to
OS X to allow for the usability of a native Cocoa application without requiring
developers to reimplement the core code that had already been written for the
Windows client that had been written in C#/.NET.
Dumbarton provides:
- Mapping of memory management between Mono and Objective-C. If you understand
memory management in ObjC, memory management of Dumbarton objects is no
different.
- A set of ObjC categories to facilitate easy conversion between Application
Kit objects and their C# equivalents. More will be added as demand requires.
- Conversion (and re-throwing) of managed .NET exceptions to Objective-C
exceptions.
Prerequisites
-------------
- Install Mono.Framework. You can get Mono.Framework
from http://www.mono-project.com/Downloads
- Install the Dumbarton.Framework in this package into /Library/Frameworks
Provided examples
-----------------
DBCommandLineExample demonstrates a number of Dumbarton features
- Calling native functions from managed code
- Calling managed code (functions, properties, fields) from native code
- Writing a Dumbarton wrapper for a C# class
- Exception handling
DBCocoaExample is the classic Currency Converter application; it
demonstrates a simple frontend that uses mono for its backend.
Creating a new project
----------------------
To setup a new XCode project using Dumbartion:
- Create an empty project normally, make sure it builds
- Add Mono.Framework and Dumbarton.Framework as to your project
(option-click in Groups & Files, Add->Existing Frameworks...)
- Add the output of the shell command "pkg-config mono --libs" to the
"Other Linker Flags" section of your project build settings.
Also, add "-bind_at_load" to the same setting if you want to supress
a linker warning. You may want to replace the explicit version number
from the pkg-config output with the word "Current" in order to avoid
build problems after upgrading your installation of Mono.
(example: /Library/Frameworks/Mono.framework/Versions/1.1.13.2/lib
becomes: /Library/Frameworks/Mono.framework/Versions/Current/lib)
- Similarly, do the same with "pkg-config mono --cflags" and the
"Other C Flags" section of your project build settings. You should
also do the same Mono version replacement as described in the previous
step.
- Add /Library/Frameworks to "Framework Search Paths"
- turn off ZeroLink on your Debug target, since it doesn't work against mono
- enabled Objective C exceptions in your project build settings. Dumbarton
catches managed exceptions and rethrows them as ObjC exceptions.
- Add any build steps required for compiling your .cs files. The examples
just use a simple shell script build step that compiles the C# code into
a dll. Depending on your project, you may want to create a separate target
for your managed .dll(s) and make your application target depends on the
managed .dll targets.
Building the project
--------------------
At this point, your project should build cleanly and run without linker errors.
To Do
-----
- Because Mono/Dumbarton do not ship with OS X, you may want to ship Mono and
the Dumbarton framework with your application. This is mostly a matter of
copying the Mono libraries, Dumbarton.framework, and the parts of the GAC
that your managed code requires into your application bundle. You then need
to rewrite the install names of your binaries so that they are relative to
@executable_path. This will eventually be demonstrated in the release target
of the Cocoa example application.