Я обдумываю, как лучше разделить усилия между командами для нового проекта. У нас есть группа служб приложений Windows C# и небольшая группа iOS Objective-C. Также вероятно, что рано или поздно потребуется приложение для Android.
Сборка уровня домена/API на устройстве, которое вызывает наши службы и обрабатывает синхронизацию с локальным хранилищем данных, является логическим компонентом, который нужно написать на C# и скомпилировать с помощью MonoTouch. Затем команда Objective-C ссылается на этот компонент. Это возможно? Я много читал о MonoTouch, ссылающемся на сборки C, но может ли это работать наоборот?
Было бы здорово услышать о каком-либо опыте использования этого подхода, если это возможно!
Спасибо, Аарон.
Ответ 1 · рейтинг 2 · miguel.de.icaza
Хотя это технически возможно, сегодня нет простого способа сделать это.
Лучшее, что вы можете сделать сейчас, это запустить приложение из C#, а затем, если хотите, передать управление вашему коду на Objective-C. Во время запуска C# вы можете зарегистрировать методы, которые будут вызываться кодом Objective-C, используя P/Invoke для вызова чего-то вроде:
delegate void some_callback_t (int parameter1, int parameter2);
[DllImport ("__Internal")]
void SetCallback (some_callback_t callback);
static void mycallback (int parameter1, int parameter2)
{
// Here goes your C# logic to be called by C
}
Затем вы звоните:
SetCallback (mycallback);
Обратите внимание, что mycallback должен быть статическим методом (ограничение статической компиляции). Затем ваш код Objective-C может потреблять службы, реализуя что-то вроде:
typedef (*callback_t) (int p1, int p2);
callback_t callback;
void SetCallback (callback_t cb)
{
callback = cb;
}
void InvokeCSharp ()
{
callback (1, 2);
}