我想知道并理解最终称为实际iOS/android/wp的代码,当使用Mosync代码库中的NativeUI C 类时。
我已经快速查看了github上的几堂课,例如button.cpp等,但是我无法轻易地看到如何引用真正的本机设备小部件。
我不是C/C 开发(Java),但我有点期望一些#IFDEF或某些东西可以"切换"各自的基础实现。如果不是这样,那我就可以了,请放纵我的好奇心。
提到的 button.cpp 的C 小部件类中有其subs类,in widget.cpp ,它基于一个基于一个窗口字符串参数。此外,通过字符串参数有效地设置了任何小部件属性。
my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");
mosync在 widgetfunctions.idl 中实现本机UI小部件的" IDL"接口:
typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);
这是对功能的语言独立描述,它通过c调用接口从 nativeui :: widget 访问:
handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");
直到这里,我们都位于Mosync C/C 层上,这是具有系统调用接口的VM。从这里转换为其他方法的其他平台(Java,c#等)的语言:
它可以使用Java本机接口(JNI)在 mosyncnativeui.java中的Android运行时调用相应的功能::
public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)
或将其编译到中间的"管道语言",伪汇编方言中,然后将此语言转换为Windows Phone 7的Visual Studio C#,或iOS的Xcode项目。
所有平台在"运行时"中实现了UI引擎,该引擎与每个应用程序包捆绑在一起。此运行时是在相应的SDK中预先构建的,并实现了本机UI调用。