HarmonyOS C++和ArkTS交互

我们c++层分装了一套蓝牙交互的整体流程,蓝牙协议,解析,发送加密和解密的库。 遇到了和c++如何交互问题。

方案如下:

1、c++层创建了一个蓝牙的接口类,

class BlueDevice_cpp{
  public:
    virtual  void permission() = 0;
    virtual void scan() = 0;
    virtual  void connect()=0;
    virtual  void send() = 0;
    virtual  void disconnect()=0;
    virtual ~BlueDevice_cpp() {}
};

2、ArkTS继承这个类或者创建一个新类实现上面类的方法(例如:BlueDevice_ts)。

3、在napi层 创建一个 BlueDeviceService 的单利类

4、BlueDeviceService 这个单利类有一个方法 native_setBlueDevece(BlueDevice * obj), 会接收ArkTS创建的这个对象(BlueDevice_ts)。并且把这个对象存在BlueDeviceService 类中

5、 后续调用 service调用scan 会直接使用 这个ts对象调用它的scan方法。 connect,send等的方法。 这个如何实现?

c++ 中拿到ts这个BlueDevice对象后,后续调用scan等方法出现对象是NULL的问题。 希望能给出一个demo,包括单利和ts对象的存储和使用。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

可参考如下示例:

// .cpp文件中编写TransObect方法
static napi_value TransObect(napi_env env, napi_callback_info info){
  size_t argc = 1;
  napi_value js_cb;
  napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr);

  napi_value str;
  napi_create_string_utf8(env, "John", 4, &str);
  napi_set_named_property(env, js_cb, "sMsg", str);

  napi_value staticMethod;
  napi_get_named_property(env, js_cb, "staticMethod", &staticMethod);
  napi_call_function(env, js_cb, staticMethod, 0, nullptr, nullptr);

  return nullptr;
}

// 通过import的方式,引入native能力
import testNapi from 'libentry.so';

class tsClass {
  static sMsg: string = "Hello";

  static staticMethod() {
    console.log('Static method called. sMsg = ' + tsClass.sMsg);
  }
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Button('Test')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            testNapi.transobject(tsClass);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

// native侧暴露给ArkTS侧接口的声明
export const transobject: (a: Object) => void;

NAPI开发还可以参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/node-api_u5b9e_u73b0_u8de8_u8bed_u8a00_u4ea4_u4e92-V5

分享
微博
QQ
微信
回复
1天前
相关问题
ArkTSC++之间的交互
1464浏览 • 1回复 待解决
HarmonyOS ArkTSC/C++交互
774浏览 • 1回复 待解决
ArkTS/js怎样与C++进行交互
268浏览 • 1回复 待解决
HarmonyOS ArkTsC++实时通信
192浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
2269浏览 • 1回复 待解决
C++ 如何获取操作 Arkts 实例
977浏览 • 1回复 待解决
如何实现ArkTSC/C++的数组转换
782浏览 • 1回复 待解决
HarmonyOS ETSc++层通信
41浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
436浏览 • 1回复 待解决
ArkTSC++互相直接调用
2324浏览 • 1回复 待解决
C++调用ArkTS 定义的方法
2073浏览 • 1回复 待解决
如何实现ArkTSC/C++的HashMap转换?
1155浏览 • 0回复 待解决
ArkTS调用C++类中的成员函数
1347浏览 • 1回复 待解决
ArkTS对象绑定的C++对象如何回收?
951浏览 • 1回复 待解决
ArkTS层通过接口访问C++层对象
389浏览 • 1回复 待解决