JSVM-API中新增创建和使用外部字符串的接口。
在JSVM-API中,在用户提供的Latin1/UTF16格式字符串所在内存上直接创建对应的JavaScript字符串,和正常的JavaScript字符串能够进行同样的操作。
| 接口 | 功能说明 |
|---|---|
| OH_JSVM_CreateExternalStringLatin1 | 使用ISO-8859-1编码的C字符串,创建一个外部的JavaScript字符串。 |
| OH_JSVM_CreateExternalStringUtf16 | 使用UTF16-LE编码的C字符串,创建一个外部的JavaScript字符串。 |
JSVM-API接口开发流程参考使用JSVM-API实现JS与C/C++语言交互开发流程,本文仅对接口对应C++相关代码进行展示。
cpp部分代码:
- #include <cstring>
- #include <string>
- static char stringLatin1[] = "hello";
- static char16_t stringUTF16[] = u"world";
-
- static JSVM_Value testExternalString(JSVM_Env env, JSVM_CallbackInfo info) {
- JSVM_VM vm;
- OH_JSVM_GetVM(env, &vm);
-
- JSVM_HandleScope handleScope;
- OH_JSVM_OpenHandleScope(env, &handleScope);
- JSVM_Value jsStrLatin1 = nullptr;
- bool copied = true;
- char buf[10];
- OH_JSVM_CreateExternalStringLatin1(env, stringLatin1, strlen(stringLatin1), nullptr, nullptr,
- &jsStrLatin1, &copied);
- OH_JSVM_GetValueStringUtf8(env, jsStrLatin1, buf, 10, nullptr);
- OH_LOG_INFO(LOG_APP, "created latin1 string is : %{public}s\n", buf);
- // 这里 copied 为 true 表示创建 external string 失败,否则表示创建成功
- OH_LOG_INFO(LOG_APP, "create external string failed : %{public}d\n", copied);
- copied = true;
- JSVM_Value jsStrUTF16 = nullptr;
- OH_JSVM_CreateExternalStringUtf16(env, stringUTF16, std::char_traits<char16_t>::length(stringUTF16),
- nullptr, nullptr, &jsStrUTF16, &copied);
- OH_JSVM_GetValueStringUtf8(env, jsStrUTF16, buf, 10, nullptr);
- OH_LOG_INFO(LOG_APP, "created utf16 string is : %{public}s\n", buf);
- // 这里 copied 为 true 表示创建 external string 失败,否则表示创建成功
- OH_LOG_INFO(LOG_APP, "create external string failed : %{public}d\n", copied);
- OH_JSVM_CloseHandleScope(env, handleScope);
-
- return nullptr;
- }
-
- static JSVM_CallbackStruct param[] = {
- {.data = nullptr, .callback = testExternalString},
- };
-
- static JSVM_CallbackStruct *method = param;
-
- // wrapperObject方法别名,供JS调用
- static JSVM_PropertyDescriptor descriptor[] = {
- {"testExternalString", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
- };
-
- // 样例测试JS
- const char *srcCallNative = R"JS(testExternalString();)JS";
- created latin1 string is : hello
- create external string failed: 0
- created utf16 string is : world
- create external string failed: 0
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功