native侧如何调用类的静态方法?

当前native侧,基于napi,调用js侧类方法的流程为:

1. native层获取到js传入的类object

2. 从Object获取到某个方法名(例如 “getFunc”)

3. 调用getFunc方法,实现native调用js侧实例类方法

但是目前需要native调用某个js类的静态方法,那么应该如何调用呢?预期是不需要实例化该类,即可调用。

HarmonyOS
2024-05-10 22:25:29
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zhuyanxi
import { CustomButton } from '../common/CustomButton'; 
import { Logger } from '../common/Logger'; 
import libappentry from 'libappentry.so'; 
 
const log: Logger = new Logger('NAPIFuncPage'); 
 
@Entry 
@Component 
struct NAPIFuncPage { 
  build() { 
    Column() { 
      // 增加一个按钮点击调用native接口 
      CustomButton({ mTitle: '点击调用native方法' }).onClick(() => libappentry.callStaticMethod(TsClass)) 
    } 
    .width('100%').alignItems(HorizontalAlign.Start) 
  } 
} 
 
export class TsClass { // 这里定义一个类 
  public static TsMethod(): void { // 这里定义一个静态方法 
    log.info('do static TsMethod'); 
  } 
} 
 
// index.d.ts 导出接口 
export const callStaticMethod: (className: Object) => void; 
 
// native侧实现参考 
 
static napi_value ts_callStaticMethod(napi_env env, napi_callback_info info) { 
  OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, LOG_TAG, "ts_callStaticMethod"); 
  size_t argc = 1; 
  napi_value js_Class_name; // 取出类名 
  napi_get_cb_info(env, info, &argc, &js_Class_name, nullptr, nullptr); 
 
  napi_value staticMethod; // 直接调用类名下的静态方法 
  napi_get_named_property(env, js_Class_name, "TsMethod", &staticMethod); 
  napi_call_function(env, js_Class_name, staticMethod, 0, nullptr, nullptr); 
  return nullptr; 
} 
 
void FunctionC::Export(napi_env env, napi_value exports) { 
  napi_property_descriptor desc[] = { 
    {"callStaticMethod", nullptr, ts_callStaticMethod, nullptr, nullptr, nullptr, napi_default, nullptr}}; 
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, LOG_TAG, "Export"); 
}
分享
微博
QQ
微信
回复
2024-05-11 11:25:16
相关问题
native如何使用静态方法
92浏览 • 1回复 待解决
c++可以直接调用tsstatic方法吗?
248浏览 • 1回复 待解决
Native如何打印char指针
285浏览 • 1回复 待解决
Native如何调ArkTS方法
437浏览 • 1回复 待解决
Native如何获取可操作文件目录
288浏览 • 1回复 待解决
ArkTSNative如何进行map数据交互
394浏览 • 1回复 待解决
如何Native释放ArkTS对象
458浏览 • 1回复 待解决
nativelog获取不到
112浏览 • 1回复 待解决
如何Native获取APP版本信息
346浏览 • 1回复 待解决
Native如何使用hilog打印出日志信息
374浏览 • 1回复 待解决
Native如何引入头文件deviceinfo.h
312浏览 • 1回复 待解决
Native如何集成三方SO库
498浏览 • 1回复 待解决
如何Native构建一个ArkTS对象
366浏览 • 1回复 待解决
Native创建线程是否有限制
396浏览 • 1回复 待解决