HarmonyOS 鸿蒙Next 老项目c代码生成的库(无接口映射层的代码,即ArkTS-C库双向调用的代码)无法直接通过arkts调用

发布于 1周前 作者 h691938207 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 老项目c代码生成的库(无接口映射层的代码,即ArkTS-C库双向调用的代码)无法直接通过arkts调用

老项目c代码生成的库(无接口映射层的代码,即ArkTS-C库双向调用的代码),无法直接通过arkts调用

1)我们使用本地创建的native c++ demo工程,可以实现ArkTS调用c++库。这是因为我们在c++库中增加了接口映射层(即ArkTS-C库双向调用的代码) EXTERN_C_START

// 模块初始化

static napi_value Init(napi_env env, napi_value exports) {
// ArkTS接口与C++接口的绑定和映射 
napi_property_descriptor desc[] = {
{
“callNativea”
}, nullptr, CallNative, nullptr, nullptr, nullptr, napi_default, nullptr
},
{
“nativeCallArkTS”, nullptr, NativeCallArkTS, nullptr, nullptr, nullptr, napi_default, nullptr
},
}; 

// 在exports对象上挂载CallNative/NativeCallArkTS两个Native方法 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } EXTERN_C_END

 2)但是,老项目C库没有上面这一层接口映射层,因此我们需要想办法在增加一层接口映射层来调用C库的方法;调用关系如下: ArkTS — 接口映射层(实现ArkTS-C库直接双向调用) — 中间层 — C库(老的C库工程,编译出的so文件,如FFmpeg库等)  TODO:

1)有中间层的情况下,暂时不知道怎么处理,帮忙提供包含“中间层”的ArkTS调用C库的Demo

2)或者提供其他方案,能够实现ArkTS调用不带接口映射层的C库so文件的方法


更多关于HarmonyOS 鸿蒙Next 老项目c代码生成的库(无接口映射层的代码,即ArkTS-C库双向调用的代码)无法直接通过arkts调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
缺少依赖库导致的崩溃

更多关于HarmonyOS 鸿蒙Next 老项目c代码生成的库(无接口映射层的代码,即ArkTS-C库双向调用的代码)无法直接通过arkts调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的HarmonyOS鸿蒙Next老项目C代码生成的库无法直接通过ArkTS调用的问题,这通常是由于ArkTS与原生C库之间的接口不匹配或缺乏必要的桥接层导致的。

在HarmonyOS中,ArkTS主要用于构建UI和前端逻辑,而原生C库则通常处理底层逻辑或性能要求较高的任务。为了实现两者的互操作,通常需要编写一层接口映射代码,即所谓的“桥接层”,以适配ArkTS的调用方式和C库的接口。

由于您提到的是无接口映射层的代码,这意味着ArkTS无法直接识别或调用C库中的函数。为了解决这个问题,您需要手动编写或自动生成这些接口映射代码,确保ArkTS能够正确调用C库中的功能。

此外,请检查您的C库是否已正确编译并链接到ArkTS项目中,以及是否已正确配置相关的编译选项和依赖项。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。在那里,您可以获得更专业的技术支持和解决方案。

回到顶部