gpt4 book ai didi

android - 如何在 NativeUI C++ 基础结构中解析实际的 native UI 小部件?

转载 作者:行者123 更新时间:2023-11-28 07:08:36 27 4
gpt4 key购买 nike

当在 MoSync 代码库中使用 NativeUI C++ 类时,我想知道并理解最终调用实际 IOS/Android/WP native 小部件的代码。

我快速浏览了 GitHub 上的几个类,比如 Button.cpp等,但我无法轻易看到如何引用真正的 native 设备小部件。

我不是 C/C++ 开发人员 (Java),但我有点期待一些 #ifdefs 或其他东西来“切换”出相应的底层实现。如果不是这样,那我也没关系,请放纵我的好奇心。

最佳答案

像提到的 Button.cpp 这样的 C++ 小部件类在 Widget.cpp 中有它们的基类,它根据字符串参数创建任何小部件。此外,任何小部件属性都是通过字符串参数有效设置的。

my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");

MoSync 在 WidgetFunctions.idl 中为 Native UI 小部件实现了一个“IDL”接口(interface):

typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);

这是对通过 C 调用接口(interface)从 NativeUI::Widget 调用的函数的独立于语言的描述:

handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");

到这里为止,我们都在 MoSync C/C++ 层,这是一种具有系统调用接口(interface)的 VM。从这里开始,它通过不同的方法被翻译成其他平台的语言(Java、C# 等):

MoSyncNativeUI.java中可以使用Java Native Interface(JNI)调用Android运行时的相应函数:

public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)

或者它被编译成中间“PIPE 语言”,一种伪汇编语言,然后这种语言被翻译成适用于 Windows Phone 7 的 Visual Studio C#,或适用于 iOS 的 XCode 项目。

所有平台都在与每个应用程序包 bundle 在一起的“运行时”中实现了一个 UI 引擎。此运行时在相应的 SDK 中预构建并实现那些 Native UI 调用。

关于android - 如何在 NativeUI C++ 基础结构中解析实际的 native UI 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com