关于 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; 
  }

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

分享
微博
QQ
微信
回复
2024-08-03 17:26:08
相关问题
如何引用本地目录的HSP
1518浏览 • 1回复 待解决
基于JSVM创建引擎执行JS代码并销毁
139浏览 • 1回复 待解决
无法从static上下文引用static方法
9691浏览 • 1回复 待解决
HarmonyOS 关于OH_AudioRenderer的问题
138浏览 • 1回复 待解决
HarmonyOS 如何创建json对象
84浏览 • 1回复 待解决
引用js库静态检查报错
648浏览 • 1回复 待解决
HarmonyOS 关于Web的动态创建
109浏览 • 1回复 待解决
TS文件引用ArkTS文件报错,如何修改
713浏览 • 1回复 待解决
Hsp间的间接引用导致资源报错
1600浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
1835浏览 • 1回复 待解决