Я хотел бы знать, есть ли способ смешать код C# и Obj-C в одном проекте. В частности, я хотел бы использовать Cocos2D для своего интерфейса в Obj-C и вызвать некоторую библиотеку MonoTouch C#, которая выполняет некоторые вычисления и возвращает некоторые значения. Есть ли способ сделать это? Или, может быть, наоборот. е. здание в MonoTouch и вызов Cocos2D-функций? Спасибо.Есть ли способ смешать MonoTouch и Objective-C?
ответ
Возможна установка, но конвейер не такой гладкий, как при выполнении всего проекта в MonoTouch. Это на самом деле то, как мы загрузили MonoTouch: мы взяли существующий образец Objective-C, и затем мы заменили биты один на один на управляемый код.
Мы отбросили эти образцы, как они расколоты.
Но вы все равно можете это сделать, используйте команду командной строки mxouch --xcode, чтобы сгенерировать образец программы для вас, а затем скопируйте нужные вам биты из сгенерированного шаблона.m.m.m. Настройте компоненты, которые вы хотите, и просто запустите проект XCode.
Во время цикла разработки, вы будете продолжать использовать mtouch --xcode
Вызов Objective-C из MonoTouch определенно выглядит возможным. См. Objective-C selector examples
Да, я тоже видел эту страницу, но это слишком сложно. Было бы лучше иметь его, как описано выше, с графическим интерфейсом в Cocos3D и MonoTouch-Library. Посмотрел на http://monotouch.net/Documentation/XCode, где упоминается встраивание, а также ссылка на основную структуру Mono, но не знаю, подходит ли это для этого. – 2009-10-05 22:23:51
Ну, похоже, что вложение Mono VM - это путь, поскольку он действует как библиотека для вашего основного приложения. Направления на этой странице Xcode выглядят довольно просто. – nall
В какой библиотеке вы звоните? Возможно, существует эквивалент Objective-C.
Это обычная библиотека C#, которую трудно переносить. Он уже компилируется с помощью MonoTouch, но мне нужен способ включить его в пользовательский интерфейс, который находится в Cocos3D. – 2009-10-06 06:13:16
Я не сказал, чтобы портировать его. Я спрашивал, что он делает, потому что есть хороший шанс, что вы можете найти другую библиотеку, которая делает то, что вы хотите сделать, в Objective-C (или даже C). Итак, что делает библиотека? –
Вы правы, вы не сказали, чтобы портировать его. Но я не думаю, что есть эквивалент Obj-C/C, поскольку эта библиотека основана на недавнем исследовании коллеги. В двух словах это какой-то механизм рассуждений. Думаю, мы попробуем предложение Мигеля. – 2009-10-11 19:13:42
За выходные выяснилось, что кто-то был перенос cocos2d для .NET, так что вы также могли бы сделать всю работу на .NET:
http://github.com/city41/CocosNet
Cocos2D начал как проект Python, который позже получил портирована на Objective-C, и теперь есть активные усилия, чтобы довести его до C#. Он еще не закончен, но автор принимает исправления и может быть лучшим способом продвижения вперед.
Отлично, спасибо! – 2009-10-22 17:17:34
Это устаревший проект и не работал в течение нескольких лет. Посмотрите на cocos2d-x – FlavorScape
Re: неизвестно (Google):
На самом деле мы сделали это, как описано.
Посмотрите эту страницу для быстрого запуска, но последний сегмент кода на этой странице неверен, потому что он пропускает «-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-стиля. Для хорошего ознакомления см. this page.
Также может быть полезен Mono-Embedding-API documentation.
Что вы должны сделать сейчас в своем Obj-C-коде, это сделать вызовы Embedding-API. Эти шаги могут включать: Получить домен приложения, получить сборку, получить изображение сборки, найти класс, который вы хотите использовать, создать экземпляр объекта из этого класса, найти методы в классе, вызвать методы на объекте, инкапсулировать аргументы метода в C-массивы и передать их методу-вызову, получить и извлечь возвращаемые значения метода. Приведенные примеры приведены на странице внедрения-api-doc-страницы.
Вам просто нужно быть осторожным с потреблением памяти в вашей библиотеке, так как время автономной работы занимает некоторую память.
Так что это путь от Obj-C до C#. Если вы хотите совершать звонки с C#/Mono в свою Obj-C-программу, вам нужно использовать привязки MonoTouch, которые описаны here.
Вы также можете использовать чистые вызовы C-метода из вложения/P/Invoke-API.
Надеюсь, вам это поможет.
- 1. Есть ли способ смешать виды Android?
- 2. Есть ли способ смешать проверки в jQuery и CodeIgniter
- 3. Есть ли способ смешать известные преобразования в Famo.us?
- 4. Есть ли способ смешать формы ниндзя с плагином WP-reCAPTCHA?
- 5. Есть ли способ обернуть блок ObjectiveC в указатель на функцию?
- 6. Проблемы с MonoTouch при связывании библиотеки ObjectiveC
- 7. MonoTouch привязка к библиотеке ObjectiveC не работает
- 8. Есть ли у MonoTouch CGRectGetMaxX и CGRectGetMaxY?
- 9. Есть ли календарь для Monotouch?
- 10. Есть ли способ сделать «обычную» карту через MonoTouch?
- 11. Есть ли способ сделать модульные тесты в Monotouch 4/Monodevelop?
- 12. Есть ли способ сделать родную библиотеку классов какао в MonoTouch?
- 13. Лучший способ смешать полиморфную ассоциацию и иерархию?
- 14. Проверьте, есть ли UIScrollView в Monotouch
- 15. Есть ли простой способ смешать пружинные мобильные и apache-плитки, чтобы помочь использовать общие элементы?
- 16. Есть ли шанс на cocos2d в MonoTouch?
- 17. Действительно ли стоит смешать AngularJS и KendoUI?
- 18. Назначение ObjectiveC и init?
- 19. Есть ли хороший способ смешать быстро меняющиеся данные в памяти с большими данными базы данных SQL?
- 20. Есть ли способ смешать статичные с динамическими маршрутами в Laravel 4?
- 21. Есть ли способ проверить, есть ли хост?
- 22. Каков наилучший способ смешать паспорт-facebook и паспорт-jwt?
- 23. GetWriterForMessage() не вызывается в Monotouch - есть ли обходной путь?
- 24. Есть ли способ поговорить?
- 25. Есть ли лучший способ?
- 26. Можете ли вы смешать% и px для выравнивания таблицы?
- 27. Есть ли лучший способ?
- 28. Пытаюсь смешать Swing и LWJGL
- 29. ALLOCA и ObjectiveC Garbage Collector
- 30. Функции и параметры - есть ли лучший способ?
Спасибо! Я попробую. – 2009-10-11 19:15:09
Возможно, это уже не лучший способ: [* '--xcode = DIRECTORY' ... Обратите внимание, что этот параметр не поддерживается и может быть удален в будущей версии mtouch. *] (Http: // iosapi. xamarin.com/?link=man%3amtouch(1)). Я считаю, что Apple некоторое время назад смягчала ограничения на интерпретируемые языки, так что если вы включите весь код, который будет интерпретироваться с вашим пакетом, все в порядке. Это привело бы меня к выводу, что внедрение Mono и вызов его из Objective-C/Objective-C++ - это путь. –
Miguel: вы можете обновить свое сообщение, указав, что это невозможно. –