鸿蒙开发踩坑二(taskpool执行native层报错)

背景

  1. 做网络请求的C++和ets封装,有些网络请求操作我是打算在ets业务层用线程池执行native层接口,需要子线程执行网络请求。

问题

  1. 在taskpool.Task里面执行native接口访问时候,突然报错 ”TypeError: is not callable“,一脸懵逼,主线程可以访问,我切换子线程访问就被限制了,百思不得其解

报错如下图所示:


报错
  1. 后面我们组同事全方面和demo对比一次,把目标锁定在C++加载函数init声明这一块,其中nm_modname必须和你的目录名字保持一致,要不然就会出现我们这种情况,切换到子线程访问不到native层的问题。

  2. 工程目录和nm_modname关系图片中,假如nm_modname改成了entry.A或者entry_A都是会出现子线程无法访问native代码的问题

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},
};
工程目录和nm_modname关系.png

总结

  1. 多学习踩坑,一起为鸿蒙社区贡献自己的力量

学习

  1. 鸿蒙官网有native多线程访问的demo,demo链接:https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20240508174220.24404806980799251136607746093310:50001231000000:2800:8A8B867A3FF8077D49FB8F44AD9A7CFE8F3D7E7F14DFA3BB3A6A097DF138FA71.zip?needInitFileName=true
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容