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通讯”