HarmonyOS鸿蒙Next中ndk开发多个相同的node-api接口

HarmonyOS鸿蒙Next中ndk开发多个相同的node-api接口

三个类里面都有三个相同方法名的node-api接口,在Index.d.ts里面要如何区分,在native层要怎么注册方法。

class A {
  setProp():number {
    return testApi.aSetProp();
  }
}

class B {
  setProp():number {
    return testApi.bSetProp();
  }
}

class C {
  setProp():number {
    return testApi.cSetProp();
  }
}

Index.d.ts

export const aSetProp:()=>"number";

export const bSetProp:()=>"number";

export const cSetProp:()=>"number";

除了定义不同名字之外,还有什么其它的方法?


更多关于HarmonyOS鸿蒙Next中ndk开发多个相同的node-api接口的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

可以使用命名空间区分,参考代码:

// index.d.ts

namespace ClassOne {
export const SetProp: () => number;
}

namespace ClassTwo {
export const SetProp: () => number;
}

namespace ClassThree {
export const SetProp: () => number;
}

调用这些方法时,需要指定命名空间,如:

ClassOne.SetProp()和ClassTwo.SetProp()

更多关于HarmonyOS鸿蒙Next中ndk开发多个相同的node-api接口的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用NDK开发多个相同的Node-API接口时,可以通过为每个接口创建独立的模块来实现。每个模块可以包含相同的接口逻辑,但需确保模块名称和注册函数唯一。通过napi_module_register函数注册模块,并在napi_module结构体中定义模块名称和注册函数。这样可以在多个模块中复用相同的接口逻辑,同时避免冲突。

在HarmonyOS Next的NDK开发中,处理多个类中相同方法名的Node-API接口时,可以通过以下方式实现:

  1. 在TypeScript声明文件(index.d.ts)中,可以通过命名空间(namespace)来区分相同方法名:
export namespace A {
  export const setProp: () => number;
}

export namespace B {
  export const setProp: () => number;
}

export namespace C {
  export const setProp: () => number;
}
  1. 在Native层注册时,可以使用不同的模块名或前缀来区分:
// 注册A类的setProp
napi_property_descriptor descA[] = {
  {"setProp", nullptr, ASetProp, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, exports, sizeof(descA)/sizeof(descA[0]), descA);

// 注册B类的setProp
napi_property_descriptor descB[] = {
  {"setProp", nullptr, BSetProp, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, exports, sizeof(descB)/sizeof(descB[0]), descB);
  1. 另一种方法是在Native层使用对象封装:
// 创建A对象并注册方法
napi_value aObj;
napi_create_object(env, &aObj);
napi_property_descriptor aDesc[] = {
  {"setProp", nullptr, ASetProp, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, aObj, 1, aDesc);
napi_set_named_property(env, exports, "A", aObj);

// 创建B对象并注册方法
napi_value bObj;
napi_create_object(env, &bObj);
napi_property_descriptor bDesc[] = {
  {"setProp", nullptr, BSetProp, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, bObj, 1, bDesc);
napi_set_named_property(env, exports, "B", bObj);

这样在TS层可以通过A.setProp()和B.setProp()来调用不同的实现。

回到顶部