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-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
~/work$export EXPOS_TOOLCHAIN_PATH=/opt/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
如果要编译C++的原生程序,请在终端命令行cd到 native/example/c_cpp目录,执行编译脚本,生成可执行文件 ipc_example_c
~/native/example/c_cpp$./build.sh
如果要编译Go的原生程序,请在终端命令行cd到 example/go 目录,执行编译脚本,生成可执行文件 ipc_example_go
~/native/example/go$./build.sh
2.拷贝原生可执行程序 ipc_example_c(或者ipc_example_go)到Studio所在的Windows环境
从Linux开发主机上将前面编译好的可执行文件 ipc_example_c(或者ipc_example_go)拷贝到Windows开发主机的工作目录备用, 如 D:\native\ipc_example
3. 在工作目录(例如上步的D:\native)新建一个名为 init.rc 的文本文件,该文件为原生程序的启动脚本,打开并编辑内容为(原生程序在后面步骤中打包到APP中时,固定拷贝到/app/native/目录):
/app/native/ipc_example_c &
– 生成App
1) 在Windows主机上启动WeStudio,创建一个工程,如:命名为test_ipc
2) 从控件列表拖放一个通道控件(channel)到页面(main)中, 在WeStudio属性面板,修改“名称”属性的值为 sdk_demo
3) 编辑该通道控件动作脚本
ui.main.channel.onMessage = function(sender, msg, payload, responseId) {
util.console.log(sender + ' : ' + msg); // 输出日志到调试器
if (responseId)
ui.main.channel.respond(sender, 0, ‘okay from JS’, ‘’);
}
4) 从控件列表拖放一个文本按钮控件(textButton)到页面(main)中, 编辑按钮的动作脚本:
ui.main.textButton.onRelease = function() {
ui.main.channel.postMessage('ipc_example', 'this is from JS world', '');
}
5) 工具菜单->配置,在配置对话框中选择"原生程序目录", 或者直接填写原生程序目录, 如 D:\native,该目录内容将在下步构建时打包到APP文件中
6) 工具菜单->构建,等待构建完成,点“下载应用”按钮,会启动调试器,在调试器窗口点击“烧写”, 不要关闭调试器,接着进行下面的测试
– 测试验证
1) 在调试器窗口的日志栏,观察日志输出
2) 在屏上点击按钮,观察日志输出