Frage

Ich möchte wissen, ob es einen Weg gibt, C # und Obj-C-Code in einem Projekt zu mischen. Ich würde Insbesondere mag Cocos2D für meine UI in Obj-C verwenden und einige Monotouch C # -Bibliothek nennen, die einige Berechnungen durchführt und einige Werte zurück. Gibt es eine Möglichkeit, dies zu tun? Oder vielleicht umgekehrt, d. e. Gebäude in Monotouch und Cocos2D-Funktionen aufrufen? Danke.

War es hilfreich?

Lösung

Das Setup, dass Sie beschreiben, ist möglich, aber die Pipeline ist nicht so glatt wie es ist, wenn Sie Ihr gesamtes Projekt in Monotouch tun. Dies ist in der Tat, wie wir Monotouch Bootstrap: wir haben eine bestehende Objective-C-Probe und wir ersetzt dann die Bits nacheinander mit verwalteten Code.

Wir ließen diejenigen Proben, wie sie bitrot.

Sie können aber nach wie vor das getan wird, verwenden Sie die --xcode Befehlszeilenoption des mTouch ein Beispielprogramm für Sie zu erzeugen, und kopieren Sie dann die Bits, die Sie aus dem erzeugten template.m in Ihre main.m. wollen Passen Sie die Komponenten, die Sie wollen, und starten Sie einfach die XCode-Projekt von dort aus.

Während des Entwicklungszyklus, werden Sie weiterhin verwenden mTouch --xcode

Andere Tipps

Re: unbekannt (google):

Wir dies tatsächlich taten, wie beschrieben.

Sehen Sie diese Seite für einen schnellen Start, aber das letzte Codesegment auf dieser Seite ist falsch, weil es die „--xcode“ -Parameter ausgelassen wird. http://monotouch.net/Documentation/XCode

Was haben Sie einzubetten Ihre Mono-EXE / DLL in ein Objective-C-Programm zu tun ist Ihre Quelle mit SharpDevelop zu kompilieren, dann lief mTouch mit diesen Parametern:

/Developer/MonoTouch/usr/bin/mtouch --linksdkonly --xcode=output_dir MyMonoAssembly.exe

Dies funktioniert nur mit der Vollversion von Monotouch. Der Prozess ist nicht den „--xcode“ -Argument zu verwenden. Die „--linksdkonly“ -Argument wird benötigt, wenn Sie mTouch wollen in der kompilierte Ausgabe unreferenced Klassen zu halten, sonst streift es nicht verwendeten Code.

Dann kompiliert mTouch Ihre Assembly in native ARM-Code (Dateiendung .s) und erzeugt auch eine XCode Vorlage, die Lasten, die Mono-Runtime und der Code innerhalb des XCode / ObjC-Programm. Sie können nun diese Vorlage verwenden, sofort und geben Sie Ihren Obj-C-Code oder den Laufzeit-Laden-Code Auszug aus dem „main.m“ -Datei und fügen Sie ihn in Ihr bestehenden XCode-Projekt. Wenn Sie ein vorhandenes Projekt zu nutzen, müssen auch alle EXE / DLL / .s-Dateien aus dem Xcode-Output-dir kopieren, die aus mTouch.

Jetzt haben Sie Ihren Mono-Runtime und Montage in einem XCode-Projekt geladen. Für die Kommunikation mit Ihrer Assembly, müssen Sie das Mono-Embedding-API verwenden (nicht Teil des Monotouch, aber Mono). Diese sind im C-Stil-API-Aufrufe. Eine gute Einführung finden Sie unter dieser Seite .

Auch die Mono-Embedding-API-Dokumentation könnte hilfreich sein.

Was Sie jetzt in Ihrem Obj-C-Code zu tun haben, ist Embedding-API-Aufrufe zu machen. Diese Schritte könnten beinhalten: Holen Sie sich das Anwendungsdomäne, bekommen die Montage, erhalten Sie das Bild der Einheit, suchen Sie die Klasse, die Sie verwenden möchten, instanziiert ein Objekt aus dieser Klasse, finden Methoden in der Klasse, Call-Methoden auf dem Objekt, encapsulate Methodenargumente in C-Arrays und sie dem Verfahren-Aufruf passieren, erhalten und Rückgabewerte Methode extrahieren. Es gibt Beispiele dafür auf der Einbettungs api-doc-Seite oben.

Sie müssen nur mit dem Speicherverbrauch Ihrer Bibliothek vorsichtig sein, da die Mono-Laufzeit auch etwas Speicher nimmt.

Das ist also die Art und Weise von Obj-C zu C #. Wenn Sie Anrufe von C # / Mono in Ihr Obj-C-Programm machen wollen, müssen Sie die Monotouch-Bindungen verwenden, die hier .

Sie können auch reine C-Methodenaufrufe aus der Einbettung / P / Invoke-API verwenden.

Hope this erhält Sie begonnen haben.

über das Wochenende heraus, dass jemand Cocos2D zu .NET portieren ist, so dass Sie auch die ganze Arbeit auf .NET tun können:

http://github.com/city41/CocosNet

gestartet Cocos2D als Python-Projekt, das später in Objective-C portiert wurde, und jetzt gibt es eine aktive Anstrengung es zu C # zu bringen. Es ist noch nicht fertig, aber der Autor ist Patches zu akzeptieren und könnte einen besseren Weg in der Zukunft sein.

Beim Objective-C von Monotouch sieht definitiv möglich. Sehen Sie sich die Objective-C-Selektor Beispiele

Was Bibliothek rufen Sie an? Vielleicht gibt es ein Objective-C-Äquivalent.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top