#鸿蒙通关秘籍#在HarmonyOS中如何通过Napi调用自定义ArkTS接口?

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
hm67482d67c970d

实现对自定义ArkTS接口的Napi调用,需要按照以下步骤进行:

  1. 在ObjectUtil.ts中导出相关接口:
namespace ObjectUtil {
    export function isNull(obj) {
        return obj === null;
    }
    export function isUndefined(obj) {
        return obj === undefined;
    }
    export function isNullOrUndefined(obj) {
        return isNull(obj) || isUndefined(obj);
    }
    export function toString(obj, defaultValue = '') {
        if (this.isNullOrUndefined(obj)) {
            return defaultValue;
        } else {
            return obj.toString();
        }
    }
}
export default ObjectUtil;
  1. 在build-profile.json5中添加ets文件配置:
"arkOptions": {
    "runtimeOnly": {
        "sources": [
        './src/main/ets/common/ObjectUtil.ts',
        ],
        "packages": [
        ]
    }
},
  1. 在native代码中获取ets模块导出的变量:
static napi_value GetNativeModule(napi_env env, const char *modulePath, const char *key) {
    napi_value module;
    napi_load_module(env, modulePath, &module);

    napi_value outputObject = nullptr;
    napi_get_named_property(env, module, key, &outputObject);
    return outputObject;
}
  1. 获取并调用方法,例如获取/ets/common/ObjectUtil的isNull方法:
static napi_status CallIsNullFun(napi_env env, napi_value inputObject) {
    const char moduleName[] = "/ets/common/ObjectUtil";
    const char funcName[] = "isNull";
    napi_value isNullFun = GetNativeModule(env, moduleName, funcName);

    napi_value inputArgs[1] = inputObject;
    napi_value result;
    napi_call_function(env, nullptr, isNullFun, 1, inputArgs, &result);
    return result;
}
分享
微博
QQ
微信
回复
7天前
相关问题
HarmonyOS 自定义接口如何使用?
138浏览 • 1回复 待解决
HarmonyOS 自定义方法链式调用
147浏览 • 1回复 待解决
c++实例化自定义类并调用方法
313浏览 • 1回复 待解决