| 接口 | 功能说明 |
|---|---|
| OH_JSVM_CreateExternalStringLatin1 | 使用ISO-8859-1编码的C字符串,创建一个外部的JavaScript字符串。 |
| OH_JSVM_CreateExternalStringUtf16 | 使用UTF16-LE编码的C字符串,创建一个外部的JavaScript字符串。 |
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 result, copied : %{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 result, copied : %{public}d\n", copied);
OH_JSVM_CloseHandleScope(env, handleScope);
return nullptr;
}
static JSVM_CallbackStruct param[] = {
{.data = nullptr, .callback = testExternalString},
};
static JSVM_CallbackStruct *method = param;
// testExternalString方法别名,供JS调用
static JSVM_PropertyDescriptor descriptor[] = {
{"testExternalString", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
};
// 样例测试JS
const char *srcCallNative = R"JS(testExternalString();)JS";