Skip to content

文档-工程实例-native

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

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

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

1559223867956840.png
– 编译和准备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) 在屏上点击按钮,观察日志输出