Вопрос

Я хотел бы знать, есть ли способ объединить код C# и Obj-C в одном проекте.В частности, я хотел бы использовать Cocos2D для своего пользовательского интерфейса в Obj-C и вызвать некоторую библиотеку MonoTouch C#, которая выполняет некоторые вычисления и возвращает некоторые значения.Есть ли способ сделать это?А может быть и наоборот, т.е.е.сборка в MonoTouch и вызов функций Cocos2D?Спасибо.

Это было полезно?

Решение

Описываемая вами настройка возможна, но конвейер не такой гладкий, как при выполнении всего проекта в MonoTouch.Фактически, именно так мы запустили MonoTouch:мы взяли существующий образец Objective-C и затем заменили его биты один за другим управляемым кодом.

Мы выбросили эти образцы, поскольку они гниют.

Но вы все равно можете это сделать, используя параметр командной строки mtouch --xcode, чтобы сгенерировать для вас пример программы, а затем скопировать нужные биты из сгенерированного файла template.m в ваш main.m.Настройте нужные вам компоненты и просто запустите проект XCode оттуда.

Во время цикла разработки вы продолжите использовать mtouch --xcode.

Другие советы

Ре:неизвестно (гугл):

На самом деле мы сделали это, как описано.

См. эту страницу для быстрого старта, но последний сегмент кода на этой странице неправильный, поскольку в нем отсутствует параметр «--xcode».http://monotouch.net/Documentation/XCode

Чтобы встроить Mono-EXE/DLL в программу Objective-C, вам нужно скомпилировать исходный код с помощью SharpDevelop, а затем запустить mtouch со следующими параметрами:

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

Это работает только с полной версией MonoTouch.Пробная версия не позволяет использовать аргумент «--xcode».Аргумент «--linksdkonly» необходим, если вы хотите, чтобы mtouch сохранял неиспользуемые классы в скомпилированном выводе, в противном случае он удаляет неиспользуемый код.

Затем mtouch компилирует вашу сборку в собственный ARM-код (расширение файла .s), а также генерирует шаблон XCode, который загружает Mono-Runtime и ваш код внутри программы XCode/ObjC.Теперь вы можете сразу использовать этот шаблон и включить свой код Obj-C или извлечь код загрузки среды выполнения из файла «main.m» и вставить его в существующий проект XCode.Если вы используете существующий проект, вам также необходимо скопировать все файлы .exe/.dll/.s из каталога xcode-output-dir, созданного mtouch.

Теперь у вас есть Mono-Runtime и сборка, загруженная в проект XCode.Для связи с вашей сборкой вам необходимо использовать Mono-Embedding-API (не часть MonoTouch, а Mono).Это вызовы API в стиле C.Хорошее введение см. эта страница.

Так же Документация Mono-Embedding-API может быть полезно.

Теперь в вашем Obj-C-коде вам нужно выполнить вызовы Embedding-API.Эти шаги могут включать в себя:Получите домен приложения, получите сборку, получите образ сборки, найдите класс, который хотите использовать, создайте экземпляр объекта из этого класса, найдите методы в классе, вызовите методы объекта, инкапсулируйте аргументы метода в C-массивы и передайте их к вызову метода, получению и извлечению возвращаемых значений метода.Примеры для этого приведены на странице embedding-api-doc выше.

Вам просто нужно быть осторожным с потреблением памяти вашей библиотекой, поскольку среда выполнения mono также требует некоторой памяти.

Итак, это путь от Obj-C к C#.Если вы хотите выполнять вызовы из C#/Mono в свою Obj-C-программу, вам необходимо использовать привязки MonoTouch, которые описаны здесь.

Вы также можете использовать чистые вызовы C-метода из Embedding/P/Invoke-API.

Надеюсь, это поможет вам начать.

На выходных выяснилось, что кто-то портирует Cocos2D на .NET, так что вы также можете выполнить всю работу на .NET:

http://github.com/city41/CocosNet

Cocos2D начинался как проект Python, который позже был перенесен на Objective-C, а сейчас предпринимаются активные попытки перенести его на C#.Он еще не закончен, но автор принимает исправления и, возможно, это лучший путь вперед.

Вызов Objective-C из MonoTouch определенно выглядит возможным.См. Примеры селектора Objective-C

В какую библиотеку вы звоните?Возможно, существует эквивалент Objective-C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top