Native层调用napi_create_object_with_named_properties失败,报错(HarmonyOS 鸿蒙Next)

Native层调用napi_create_object_with_named_properties失败,报错(HarmonyOS 鸿蒙Next) 我的本意是在native层向arkts层注册display.on("captureStatusChange", callback)

这段代码报崩溃

堆栈信息如下:

Tid:7030, Name:m.example.bcenv

#00 pc 00000000000a4d50 /system/lib/ld-musl-aarch64.so.1(strlen+16)(b479ed41923498a1569705990db00f45)
#01 pc 000000000061dd88 /system/lib64/platformsdk/libark_jsruntime.so(8d652b7999f311bc5b816d1aa340e29f)
#02 pc 00000000005cc9b8 /system/lib64/platformsdk/libark_jsruntime.so(panda::ObjectRef::NewWithNamedProperties(panda::ecmascript::EcmaVM const*, unsigned long, char const**, panda::Local<panda::JSValueRef> const*)+244)(8d652b7999f311bc5b816d1aa340e29f)
#03 pc 00000000000520dc /system/lib64/platformsdk/libace_napi.z.so(napi_create_object_with_named_properties+72)(d70f8a2f572f398eac86542ac1ee823b)
#04 pc 000000000008dd00 /data/storage/el1/bundle/libs/arm64/libbcevchk.so(RegisterCaptureStatusChange+336)(03583d1be9fffb45336dd76b5d5163ba985b24d1)
#05 pc 0000000000039e00 /system/lib64/platformsdk/libace_napi.z.so(panda::JSValueRef ArkNativeFunctionCallBack<true>(panda::JsiRuntimeCallInfo*)+220)(d70f8a2f572f398eac86542ac1ee823b)
#06 pc 00000000003f3b6c /system/lib64/module/arkcompiler/stub.an(RTStub_PushCallArgsAndDispatchNative+40)

at anonymous (entry/src/main/ets/pages/Index.ets:39:26)


更多关于Native层调用napi_create_object_with_named_properties失败,报错(HarmonyOS 鸿蒙Next)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

排查下napi函数的使用napi_create_object_with_named_properties的最后一个参数使用的是否正确。

崩溃问题也可以asan检测打开后,重现问题: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-asan-0000001545528013-V5

更多关于Native层调用napi_create_object_with_named_properties失败,报错(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


多谢,我再仔细检查一下,如果最后一个参数有问题的话,您有什么修改建议吗?

Beginning DecodeInternetHeifImage!

url: %{public}s

DownloadFromInternet sucess!%{public}d

DecodeHEIFImage sucess!%{public}d

napi_create_object_with_named_properties success

在HarmonyOS鸿蒙Next中,napi_create_object_with_named_properties是Node-API(Node.js API)中的一个函数,用于创建一个包含指定命名属性的对象。如果调用该函数失败,可能的原因包括:

  • 参数错误:检查传递给napi_create_object_with_named_properties的参数是否正确。确保env(表示Node-API环境的句柄)有效,且properties(属性名称和值的数组)和property_count(属性数量)正确。

  • 内存不足:如果系统内存不足,可能导致函数调用失败。检查系统内存使用情况,确保有足够的内存可供分配。

  • 属性名称或值无效:确保属性名称和值符合Node-API的要求。属性名称应为字符串,值应为有效的Node-API值类型。

  • Node-API版本不兼容:确保使用的Node-API版本与鸿蒙Next系统兼容。不同版本的Node-API可能对函数的行为有不同要求。

  • 环境未初始化:确保Node-API环境已正确初始化。在调用napi_create_object_with_named_properties之前,必须确保napi_env已有效初始化。

  • 返回值检查:检查函数返回的napi_status值,以确定具体的错误原因。常见的错误代码包括napi_invalid_arg(无效参数)、napi_generic_failure(一般性失败)等。

根据返回的错误代码,可以进一步排查和解决问题。确保代码逻辑正确,并且符合Node-API的使用规范。

回到顶部