HarmonyOS 鸿蒙Next ndk native中如何创建ArkTS对象,操作后并返回给ArkTs

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ndk native中如何创建ArkTS对象,操作后并返回给ArkTs

ndk native中如何创建ArkTS对象,操作后并返回给ArkTs

2 回复

ArkTS调用C++类中的成员函数可以参考以下示例代码: 在C++中定义一个类

class AddClass {

public:

    AddClass(std::string name)

    {

      this->instName = name;

    };

    AddClass(){};

    ~AddClass(){};

    std::string instName;

    double Add(double a, double b)

    {

     return a+b;

    };

};

为这个类绑定构造函数:

static napi_value JsConstructor(napi_env env, napi_callback_info info) {

    // 创建napi对象

    napi_value jDemo = nullptr;

    size_t argc = 1;

    napi_value args[1] = {0};

    // 获取构造函数入参

    napi_get_cb_info(env, info, &argc, args, &jDemo, nullptr);

    // args[0] js传入的参数

    char name[50];

    size_t result = 0;

    napi_get_value_string_utf8(env, args[0], name, sizeof(name) + 1, &result);

    // 创建C++对象

    AddClass *cDemo = new AddClass(name);

    //OH_LOG_INFO(LOG_APP, "%{public}s", (cDemo->instName).c_str());

    // 设置js对象name属性

    napi_set_named_property(env, jDemo, "name", args[0]);

    // 绑定JS对象与C++对象

    napi_wrap(

        env, jDemo, cDemo,

        // 定义js对象回收时回调函数,用来销毁C++对象,防止内存泄漏

        [](napi_env env, void *finalize_data, void *finalize_hint) {

            AddClass *cDemo = (AddClass *)finalize_data;

            delete cDemo;

            cDemo = nullptr;

        },

        nullptr, nullptr);

    return jDemo;

}

  

这个C++类将与JS侧的类绑定,在JS侧的类创建时,这个C++的构建函数也将调用

为类中普通函数Add()提供js侧接口:

static napi_value JsAdd(napi_env env, napi_callback_info info) {

    size_t argc = 2;

    napi_value args[2] = {nullptr};

    napi_value jDemo = nullptr;

    napi_get_cb_info(env, info, &argc, args, &jDemo, nullptr);

    AddClass *cDemo = nullptr;

    // 将js对象转为c对象

    napi_unwrap(env, jDemo, (void **)&cDemo);

    // 获取js传递的参数

    int value0;

    napi_get_value_int32(env, args[0], &value0);

    int value1;

    napi_get_value_int32(env, args[1], &value1);

    int cResult = cDemo->Add(value0, value1);

    napi_value jResult;

    napi_create_int32(env, cResult, &jResult);

    return jResult;

}

在HarmonyOS鸿蒙Next NDK环境中,创建ArkTS对象并返回给ArkTS主要涉及使用ArkUI框架与NDK的交互能力。以下是一个简要的步骤说明:

  1. 定义ArkTS类:首先,在ArkTS文件中定义一个你需要创建并返回的类。确保该类包含必要的属性和方法。

  2. NDK代码创建ArkTS对象:在NDK代码中,使用ArkUI框架提供的API来创建ArkTS对象实例。这通常涉及使用相关的ArkUI库和接口。

  3. 将对象传递给ArkTS:创建对象后,你需要将其传递给ArkTS环境。这通常通过特定的桥接机制实现,如全局变量、事件回调或特定的接口方法。

  4. 在ArkTS中接收对象:在ArkTS代码中,通过相应的机制接收从NDK传递过来的对象,并进行后续操作。

需要注意的是,具体操作依赖于HarmonyOS鸿蒙Next NDK和ArkUI框架的具体版本及API。开发者应参考最新的官方文档和示例代码来实现这一功能。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部