# EasyNapi **Repository Path**: enbo_h/easy-napi ## Basic Information - **Project Name**: EasyNapi - **Description**: EasyNapi框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-06 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyNapi #### 介绍 ## **EasyNapi框架** 提高在C++中通过NAPI调用TS接口开发体验 ### 原1.0功能: 1. 支持调用同步TS接口,并同步返回结果,且支持出入参不定类型,入参不定数量 2. 支持调用异步TS接口,在子线程异步执行,支持回调函数(仅支持字符串出入参类型)。 ### 2.0新版相比1.0增加以下特性: 1. 支持调用异步TS接口,在子线程异步执行;增加支持出入参不定类型,入参支持不定数量;并完善对回调函数的支持。 2. 支持调用异步TS接口,并同步返回结果,且支持超时时间自定义;且出入参不定类型,入参支持不定数量。 3. 支持调用TS接口返回值为数组类型。 --- ## **接口使用说明:** ### **函数注册:** 示例: ``` import testNapi from 'libeasynapi.so'; function getSystemLanguage() : string { let systemLanguage: string = ''; systemLanguage = i18n.System.getSystemLanguage(); hilog.info(0x0000, 'TSTag', 'JS getSystemLanguage success: %{public}s', systemLanguage); return systemLanguage; } async function getPackageName() : Promise { let bundleFlag = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT; let packageName: string = ''; await bundleManager.getBundleInfoForSelf(bundleFlag).then((data) => { packageName = data['name']; hilog.info(0x0000, 'TSTag', 'JS getPackageName success: %{public}s', packageName); }).catch(err =>{ hilog.error(0x0000, 'TSTag', 'JS getPackageName failed: %{public}s', err.message); }) return packageName; } testNapi.registerFunction("getSystemLanguage", getSystemLanguage); testNapi.registerFunction("getPackageName", getPackageName); ``` >其他TS函数示例见:[entry/src/main/ets/workers/NapiWorker.ts](./entry/src/main/ets/workers/NapiWorker.ts)文件 ### **C++中调用函数:** TS函数注册后,可在C++中进行调用,一个的接口如下: - #### invokeSyncTsFunction(Args... args):调用TS同步函数 1. 示例1:调用同步TS函数,并同步返回结果;入参:有,出参:无 ``` JSFunction* jSFunction = JSFunction::getFunction("testInputParam"); jSFunction->invokeSyncTsFunction("test testInputParam"); ``` 2. 示例2:调用同步TS函数,并同步返回结果;入参:无,出参:有 ``` JSFunction* jSFunction = JSFunction::getFunction("getSystemLanguages"); LOGI("Cpp getSystemLanguages success,size: %{public}d", jSFunction->invokeSyncTsFunction>().size()); ``` 3. 示例3:调用同步TS函数,并同步返回结果;入参:有,出参:有 ``` JSFunction* jSFunction = JSFunction::getFunction("getSystemLanguageWithPrefix"); LOGI("Cpp getSystemLanguageWithPrefix success: %{public}s", jSFunction->invokeSyncTsFunction("test:").c_str()); ``` - #### invokeASyncTsFunction(Args... args):调用TS异步函数 1. 示例1:调用异步TS函数,并同步返回结果,支持设置调用TS接口超时时间(毫秒);入参:有,出参:有 ``` JSFunction* jSFunction = JSFunction::getFunction("getPackageNameWithPrefix"); LOGI("Cpp getPackageNameWithPrefix success: %{public}s", jSFunction->invokeASyncTsFunction("pkgname:",888).c_str()); ``` 2. 示例2:调用异步TS函数,并同步返回结果,入参:无,出参:有 ``` JSFunction* jSFunction = JSFunction::getFunction("getPackageName"); LOGI("Cpp getPackageName success: %{public}s", jSFunction->invokeASyncTsFunction().c_str()); ``` - #### invokeASyncTsFunctionWithThread(Callback callback, Args... args):调用TS异步函数(开启子线程调用),支持回调函数 1. 示例1:调用异步TS函数,并使用回调获取结果,入参:有 ``` // 创建一个回调函数 JSFunction JSFunction::Callback callback = [](std::string value) { LOGI("Cpp getPackageName Callback success: %{public}s", value.c_str()); }; JSFunction* jSFunction = JSFunction::getFunction("getPackageNameWithPrefix"); jSFunction->invokeASyncTsFunctionWithThread(callback, "pkgname:",888); ``` 2. 示例2:调用异步TS函数,并使用回调获取结果,入参:无 ``` JSFunction* jSFunction = JSFunction::getFunction("getPackageName"); jSFunction->invokeASyncTsFunctionWithThread(callback); ```