Я хотел бы знать и понимать код, который в конечном итоге вызывает фактические собственные виджеты IOS / Android / WP, когда в базе кода MoSync используется класс NativeUI C ++.
Я быстро взглянул на несколько классов на GitHub, например Button.cpp и т. д., но я не могу легко увидеть, как ссылки на реальные нативные виджеты устройства.
Я не разработчик C / C ++ (Java), но я как бы ожидал, что некоторые #ifdefs или что-то «выключат» соответствующую базовую реализацию. Если это не так, то это нормально для меня, просто потакайте моему любопытству.
Классы виджетов C ++, такие как Button.cpp упомянутые имеют свой базовый класс в Widget.cpp который создает любой виджет на основе строкового аргумента. Кроме того, любые свойства виджета эффективно задаются через строковые аргументы.
my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");
MoSync реализует интерфейс «IDL» для виджетов Native UI в WidgetFunctions.idl:
typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);
Это не зависящее от языка описание функций, которые вызываются из NativeUI :: Widget через интерфейс вызова C:
handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");
До этого момента мы находились на уровне MoSync C / C ++, который является своего рода виртуальной машиной с интерфейсом системных вызовов. Отсюда он переводится на языки других платформ (Java, C # и т. Д.) Различными способами:
Он может использовать Java Native Interface (JNI) для вызова соответствующих функций во время выполнения Android в MoSyncNativeUI.java:
public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)
Или он компилируется в промежуточный «язык PIPE», диалект псевдо-ассемблера, затем этот язык переводится в Visual Studio C # для Windows Phone 7 или в проект XCode для iOS.
Все платформы реализуют механизм пользовательского интерфейса в «среде выполнения», которая входит в комплект каждого приложения. Эта среда выполнения предварительно встроена в соответствующий SDK и реализует эти вызовы Native UI.
Других решений пока нет …