Linux下C/C++/GO原生程序与JavaScript界面程序通讯

WeStudio组态软件支持运行Linux下C/C++编写的标准原生程序,并且可与WeStudio生成的界面程序通讯,交换数据,方便拓展软件功能。C/C++原生程序与JavaScript程序的通讯通过SDK函数库实现,关于如何搭建编译环境和函数库说明,请参考 Linux原生程序SDK

下面以一个简单例子来说明通讯过程(该例程的源码位于最新的WeStudio安装目录,如C:\Program Files (x86)\WeStudio\native, 目录结构如下:

- 编译和准备Linux原生程序

1、将整个native目录拷贝到Linux开发主机

export 编译工具链的bin路径,假如工具链的解压路径在 /opt/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

    ~/work$export EXPOS_TOOLCHAIN_PATH=/opt/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

如果要编译C++的原生程序,请在终端命令行cd到 native/example/c_cpp目录,执行编译脚本,生成可执行文件ipc_example_c和init.rc到out文件夹

     ~/native/example/c_cpp$./build.sh

如果要编译Go的原生程序,请在终端命令行cd到 example/go 目录,执行编译脚本,生成可执行文件 ipc_example_go和init.rc到out文件夹

     ~/native/example/go$./build.sh

2、拷贝原生可执行程序 ipc_example_c(或者ipc_example_go)和init.rc两个文件到拷贝到Windows开发主机的工作目录备用, 如 E:\native

- 生成App
  • 在Windows主机上启动WeStudio,创建一个工程,如:命名为sdk_ipc

  • 从控件列表拖放一个通道控件(channel)到页面(main)中, 在WeStudio属性面板,修改“名称”属性的值为 "sdk_demo",并填写订阅通道名称为"ipc_example"

  • 编辑该通道控件动作脚本
    ui.main.channel.onMessage = function(sender, msg, payload, responseId) {
      ui.main.multiLineInput.append(sender + ' ' + msg + ' ' + payload + '\n');
      if (responseId) {
          ui.main.channel.respond(sender, responseId, 0, 'okay from JS');
      }
    };
    
  • 从控件列表拖放一个文本按钮控件(textButton)到页面(main)中, 修改文字为“发送”,编辑动作脚本:
    ui.main.textButton.onRelease = function() {
      ui.main.channel.postMessage('ipc_example', 'this is from JS world', 'this is payload');
    };
    
  • 工具菜单->配置,在配置对话框中选择"原生程序目录", 或者直接填写原生程序目录, 如 E:\native,该目录内容将在下步构建时打包到APP文件中

  • 工具菜单->构建,等待构建完成,点“下载应用”按钮,会启动调试器,在调试器窗口点击“烧写”, 不要关闭调试器,接着进行下面的测试

- 测试验证

  • 在调试器窗口的日志栏,观察日志输出
  • 在屏上点击"发送"按钮,观察日志输出

完整工程,请在最新版本的WeStudio中打开例程“原生程序与JS通讯”

results matching ""

    No results matching ""