背景
- 做网络请求的C++和ets封装,有些网络请求操作我是打算在ets业务层用线程池执行native层接口,需要子线程执行网络请求。
问题
- 在taskpool.Task里面执行native接口访问时候,突然报错 ”TypeError: is not callable“,一脸懵逼,主线程可以访问,我切换子线程访问就被限制了,百思不得其解
报错如下图所示:
后面我们组同事全方面和demo对比一次,把目标锁定在C++加载函数init声明这一块,其中nm_modname必须和你的目录名字保持一致,要不然就会出现我们这种情况,切换到子线程访问不到native层的问题。
工程目录和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},
};
总结
- 多学习踩坑,一起为鸿蒙社区贡献自己的力量