HarmonyOS 鸿蒙Next NAPI获取this问题
HarmonyOS 鸿蒙Next NAPI获取this问题
业务流程:js调用native,后native调用js
咨询问题: 如下代码: napi_get_cb_info(env, callbackInfo, 0, nullptr, &thiz, nullptr); 获取this方式是否正确 ?
遇到问题: bool has = false; status = napi_has_named_property(env, thiz, “setPointer”, &has); has一直为false
相关代码:
import LivenessSDK from 'libsdk_liveness.so';
export class LivenessDetector {
private pointer: number = -1;
public create() {
LivenessSDK.createLivenessDetector();
}
public getPointer(): number {
return this.pointer;
}
}
static napi_value createLivenessDetector(napi_env env, napi_callback_info callbackInfo) {
napi_value thiz = nullptr;
napi_status status = napi_get_cb_info(env, callbackInfo, 0, nullptr, &thiz, nullptr);
napi_value getPointerFunc = nullptr;
status = napi_get_named_property(env, thiz, "getPointer", &getPointerFunc);
LOG_INFO("napi_get_named_property:%d", status);
napi_value result = nullptr;
// native方法中调用ArkTS function,其返回值保存到result中并返到ArkTS侧。
status = napi_call_function(env, thiz, getPointerFunc, 0, nullptr, &result);
int64_t pointer;
napi_get_value_int64(env, result, &pointer);
LOG_INFO("napi_get_named_property:pointer::%d", pointer);
LOG_INFO("napi_call_function:%d", status);
return result;
}
更多关于HarmonyOS 鸿蒙Next NAPI获取this问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,请按照下述示例进行调整您的代码:
size_t argc = 1;
napi_value thiz = nullptr;
napi_status status = napi_get_cb_info(env, callbackInfo, &argc, &thiz, nullptr, nullptr);
// index.d.ts
export const createLivenessDetector: (value: Object) => void;
// ts层
public create() {
LivenessSDK.createLivenessDetector(this);
}
ChenL
LivenessSDK.createLivenessDetector(this); 必须有个入参this ?
napi_status napi_get_cb_info(napi_env env,
napi_callback_info cbinfo,
size_t * argc,
napi_value * argv,
napi_value * thisArg,
void** data) 拷贝
[in] env: 调用 API 的环境。
[in] cbinfo: 传递给回调函数的回调信息。
[in-out] argc: 指定所提供的 argv 数组的长度并接收参数的实际计数。 argc 可以选择性地通过传递 NULL 来忽略。
[out] argv: 参数将被复制到的 napi_value 的 C 数组。 如果参数数量多于提供的数量,则只复制请求数量的参数。 如果提供的参数比声明的少,则 argv 的其余部分将填充代表 undefined 的 napi_value 值。 argv 可以选择性地通过传递 NULL 来忽略。
[out] thisArg: 接收调用的 JavaScript this 参数。 thisArg 可以选择性地通过传递 NULL 来忽略。
[out] data: 回收回调的数据指针。 data 可以选择性地通过传递 NULL 来忽略。
更多关于HarmonyOS 鸿蒙Next NAPI获取this问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,NAPI(Native API)是用于原生代码开发的一套接口。关于NAPI中获取this
指针的问题,通常涉及到C++或者类似面向对象语言的上下文管理,但鸿蒙的NAPI设计更偏向于系统级原生接口,并不直接涉及高级语言的this
机制。
在原生开发环境中,this
指针主要用于C++类成员函数中指向调用该成员函数的对象实例。然而,在鸿蒙的NAPI或者更底层的系统编程中,通常不会直接处理this
指针,因为这些接口设计更多是基于函数指针、回调或者结构体传递上下文信息。
如果你在NAPI环境中遇到了类似需要获取对象实例(类似于this
)的情况,可能需要通过以下方式解决:
-
使用用户数据(User Data):在注册回调或者创建某些对象时,允许你传递一个自定义的用户数据指针,这个指针可以在回调中被访问,用于指代特定的上下文或对象实例。
-
结构体封装:设计一个结构体来封装所有需要的上下文信息,并在需要时传递这个结构体的指针。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html