目录

如何解决napi_create_bool无法创建C++的bool类型

问题现象

Node-API提供了一批接口帮助把标准数据类型转为napi_value,比如napi_create_double、napi_create_int32等等,但是napi_create_bool无法创建bool类型并转换为napi_value。

背景知识

HarmonyOS Node-API是基于Node.js 10.x LTS的Node-API规范扩展开发的机制,为开发者提供了ArkTS/JS与C/C++模块之间的交互能力。它提供了一组稳定的、跨平台的API,可以在不同的操作系统上使用。一般情况下HarmonyOS应用开发使用ArkTS/JS语言,但部分场景由于性能、效率等要求,比如游戏、物理模拟等,需要依赖使用现有的C/C++库。Node-API规范封装了I/O、CPU密集型、OS底层等能力并对外暴露ArkTS/JS接口,从而实现ArkTS/JS和C/C++的交互。

问题定位

Node-API提供了专用接口napi_get_boolean用于将bool类型的值转换为napi_value类型。

分析结论

未使用Node-API专用接口导致了无法正常获取native侧的bool值。

修改建议

使用napi_get_boolean即实现将C++中的bool类型转换为napi,参考代码如下:

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
 */
#include "napi/native_api.h"

bool  GetExcuteResult()
{
    return true;
}

static napi_value BooleanJudge(napi_env env, napi_callback_info info)
{
    bool value = GetExcuteResult();
    napi_value jsResult;
    napi_get_boolean(env, value, &jsResult);
    return jsResult;

}

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "booleanJudge", nullptr, BooleanJudge, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END

static napi_module demoModule = {
    .nm_version = 1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "entry",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};

extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
    napi_module_register(&demoModule);
}

napi_get_boolean的函数定义:根据给定的C中的boolean值,获取js中的bool对象。

总结

对于C++语言可以借助Node-API功能实现跨语言交互,官方参考链接:HarmonyOS的napi接口参考了Node.js文档。