harmony 鸿蒙Working with Latin1/UTF16 Strings Using JSVM-API
Working with Latin1/UTF16 Strings Using JSVM-API
Introduction
This topic walks you through on how to create and use external strings using JSVM-API.
Basic Concepts
By using JSVM-API, you can create JS strings directly in the memory allocated for Latin1/UTF16 strings. This allows you to manipulate these strings like normal JS strings.
Available APIs
API | Description |
---|---|
OH_JSVM_CreateExternalStringLatin1 | Creates an external JS string from a C string encoded in ISO-8859-1 format. |
OH_JSVM_CreateExternalStringUtf16 | Creates an external JS string from a C string encoded in UTF16-LE format. |
Example
If you are just starting out with JSVM-API, see JSVM-API Development Process. The following demonstrates only the C++ code involved in manipulating external strings.
Determining a Number Object
CPP code:
#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);
// If the value of copied is true, the external string fails to be created. Otherwise, the external string is created successfully.
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);
// If the value of copied is true, the external string fails to be created. Otherwise, the external string is created successfully.
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;
// Alias for the wrapperObject method to be called from JS.
static JSVM_PropertyDescriptor descriptor[] = {
{"testExternalString", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
};
// Call the C++ code from JS.
const char *srcCallNative = R"JS(testExternalString();)JS";
Expected Result
created latin1 string is : hello
create external string failed: 0
created utf16 string is : world
create external string failed: 0
你可能感兴趣的鸿蒙文章
harmony 鸿蒙Building an NDK Project with CMake
harmony 鸿蒙Building an NDK Project with the DevEco Studio Template
harmony 鸿蒙NDK Project Building Overview
harmony 鸿蒙Building an NDK Project with Prebuilt Libraries
harmony 鸿蒙C/C++ Library Mechanisms
harmony 鸿蒙Creating an NDK Project
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦