MonoTouch C # и Obj-C смешиваются? - PullRequest
1 голос
/ 07 июля 2011

Исходя из моего последнего вопроса по оптимизации, мне легче поверить, что просто невозможно оптимизировать мой код дальше, чтобы повысить производительность в моей игре.

Так что теперь у меня есть новая идея, и я хотел бы знать, возможно ли это или даже целесообразно реализовать. Поскольку я думал, что узкое место в производительности связано с физической обработкой, основанной на .net, можно ли будет вписаться в физический движок на основе Objective-C или C ++ (например, box2D) для взаимодействия с Mono?

Например, в коде Mono я бы сделал что-то вроде CreateBox (), но за кулисами поле создается в Obj-C / C ++. Или когда я делаю обновление физики, я просто вызываю функцию в Mono, и основная работа происходит в Obj-C / C ++

Если это возможно, может кто-нибудь указать мне правильное направление, чтобы начать?

1 Ответ

3 голосов
/ 07 июля 2011

Да.

Для этого есть два способа: через API C и Objective-C.

Используя C API, напишите свой собственный код на C (или C ++ с extern "C"), скомпилируйте ваш код в статическую библиотеку, свяжите ваше приложение MonoTouch со статической библиотекой , затем используйте P / Вызовите для доступа к вашим функциям C. Однако , в отличие от «обычного» P / Invoke, где вам нужно указать имя библиотеки, вам нужно указать "__Internal" в качестве имени библиотеки:

[DllImport ("__Internal")]
static extern void MethodInStaticLibrary ();

Эта же техника используется MonoTouch для вызова, например, из System.dll во время выполнения MonoTouch.

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

...