关于 OH_JSVM_CreateReference 创建非对象引用报错

当 JSVM_Value 为基础数据类型时, string 、number, undefined等,调用 OH_JSVM_CreateReference 时会返回错误,错误码是:JSVM_INVALID_ARG。

HarmonyOS
2024-08-03 11:38:28
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
NGKSWCIDT

可参考下面的代码示例:

static void TestOH_JSVM_CreateReference() 
{ 
  OH_LOG_INFO(LOG_APP, "enter TestOH_JSVM_CreateReference"); 
 
  JSVM_VM vm; 
  OH_JSVM_CreateVM(nullptr, &vm); 
  JSVM_VMScope vmScope; 
  OH_JSVM_OpenVMScope(vm, &vmScope); 
 
  JSVM_Env env; 
  // 将native函数注册成js可调用的方法,hello_cb中记录该native方法的指针和参数等信息 
  JSVM_PropertyDescriptor descriptors[] = {{"hellott", NULL, &hello_cb, NULL, NULL, NULL, JSVM_DEFAULT}}; 
  OH_JSVM_CreateEnv(vm, 1, descriptors, &env); 
  JSVM_EnvScope envScope; 
  OH_JSVM_OpenEnvScope(env, &envScope); 
 
JSVM_Status status = JSVM_OK; 
{ 
  JSVM_HandleScope handleScope; 
  OH_JSVM_OpenHandleScope(env, &handleScope); 
 
  JSVM_Value jsSrc; 
  std::string src = "abc"; 
  status = OH_JSVM_CreateStringUtf8(env, src.c_str(), src.size(), &jsSrc); 
  if (status != JSVM_OK) { 
    OH_LOG_INFO(LOG_APP, "TestOH_JSVM_CreateReference, loc1 status:%{public}d, OH_JSVM_CreateStringUtf8 failed", status); 
    return; 
  } 
  JSVM_Value object; 
  OH_JSVM_CreateObject(env, &object); 
  OH_JSVM_SetElement(env, object, 1, jsSrc); 
  JSVM_Ref srcRef = nullptr; 
  status = OH_JSVM_CreateReference(env, object, 1, &srcRef); 
  if (status != JSVM_OK) { 
    OH_LOG_INFO(LOG_APP, "TestOH_JSVM_CreateReference, loc2 status:%{public}d, OH_JSVM_CreateReference failed", status); 
    return; 
  } 
  status = OH_JSVM_DeleteReference(env, srcRef); 
  if (status != JSVM_OK) { 
    OH_LOG_INFO(LOG_APP, "TestOH_JSVM_CreateReference, loc3 status:%{public}d, OH_JSVM_DeleteReference failed", status); 
    return; 
  } 
  srcRef = nullptr; 
 
  int32_t ivalue= 3; 
  JSVM_Value jsIValue; 
  status = OH_JSVM_CreateInt32(env, ivalue, &jsIValue); 
  if (status != JSVM_OK) { 
    OH_LOG_INFO(LOG_APP, "TestOH_JSVM_CreateReference, loc4 status:%{public}d, OH_JSVM_CreateInt32 failed", status); 
    return; 
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.

基本数据类型,可以直接解析成C++的基本类型(如整型,字符串型等)存储,没有必要创建引用,后续使用时,在将基本类型转换成JSVM_Value。

分享
微博
QQ
微信
回复
2024-08-03 17:26:08


相关问题
har 包引用报错的问题
951浏览 • 1回复 待解决
HarmonyOS getaddrinfo接口调用报错
439浏览 • 1回复 待解决
HarmonyOS 内购接口调用报错
455浏览 • 1回复 待解决
如何引用本地目录的HSP
2119浏览 • 1回复 待解决
HarmonyOS react-native-svg(CAPI)使用报错
510浏览 • 1回复 待解决
基于JSVM创建引擎执行JS代码并销毁
1079浏览 • 1回复 待解决
HarmonyOS react-native-device-info使用报错
409浏览 • 1回复 待解决
HarmonyOS base64.decodeSync(str)使用报错
461浏览 • 1回复 待解决
无法从static上下文引用static方法
10511浏览 • 1回复 待解决
HarmonyOS 实现对象的弱引用
430浏览 • 1回复 待解决
HarmonyOS 关于OH_AudioRenderer的问题
808浏览 • 1回复 待解决
HarmonyOS 关于合并对象
347浏览 • 2回复 待解决
HarmonyOS 关于OH_NativeXComponent的销毁
578浏览 • 1回复 待解决