使用 C/C++ 扩展 UiBot 的功能

luo 2019-1-17 5588

1.      安装Visual Studio 2010或更高版本的Visual Studio,不支持更低版本的Visual Studio或其他编程工具/IDE/编译器。

2.      下载UiBotC/C++语言插件模板。

3.      Visual Studio打开插件模板中的LuaPlugin.sln文件。

4.      如果使用高版本的Visual Studio,会提示对模版项目进行升级。直接按照提示进行升级即可。

5.      打开Visual StudioSolution Explorer(中文版一般叫做“解决方案资源管理器”),找到项目名称LuaPlugin,按鼠标右键,选择Rename(中文版一般叫做“重命名”),将其改为你自己为插件起的名称,名称支持英文大小写字母、数字和下划线。如下图所示,其中左图为Visual Studio 2010英文版,右图为Visual Studio 2015中文版。

在插件的命名中,建议英文字母全部采用大写。这样的话,在脚本中使用插件时,无论是大写还是小写,都能正确识别到。因为编译器会用全大写的形式去尝试一次。

                                                  

_使用 C/C++ 扩展 UiBot 的功能

 

6.      Solution Explorer(中文版一般叫做“解决方案资源管理器”),可以看到本项目有三个文件:dllmain.cppentry.cppluaclib.cpp,我们只需要关注luaclib.cpp,其他两个文件一般不用修改。

7.      注意:我们已经在项目中包含了Lua语言相关的头文件定义,不需要额外定义,更不需要把Lua语言的源码引入到这个项目中来。

8.      luaclib.cpp中,我们已经定义了两个插件函数addstrcat,其功能分别是两个整数相加,以及两个字符串连接。这两个函数仅仅作为例子,不具有实际意义,在充分阅读其源码后,可以将这两个函数删掉。

9.      同时,文件的最后还有一个叫module_namestruct,其中的每一行注册了每一个插件函数。可以把其中作为示例的addstrcat删掉。

10.    编写你自己的插件函数,函数名可以随意取,但函数类型必须是:

 static int (lua_State *L)

11.    你自己的插件函数必须在文件最后的名称为module_namestruct中注册,才可以使用。仿照addstrcat函数进行注册即可。其中每一行有两项内容,第一项是字符串,代表这个插件函数在UiBot中的名字,第二项是插件函数本身的名字。

12.    在你自己的插件函数中,请参考示例和Lua的扩展接口文档,明确参数传递规则,以及返回值的规则。

13.    当插件函数的代码中出现各种异常结果时,推荐使用下面的函数抛出一个异常,这个异常会被UiBot捕捉到:

luaL_error(L, msg);

其中,msg是一个字符串,代表你要在异常中附加的信息。

14.    UiBot的脚本中,有数组(Array)和字典(Dictionary)两种数据类型。如果需要在插件中返回一个数组,请按照以下语句书写:

luaL_dostring(L, "return BasicLib.NewTable(1)");

       上述语句会在Lua的栈里面放置一个Table,你可以使用Lua的相关函数来处理这个Table,比如为其增加元素,等等。但这个Table会在UiBot中被识别为一个数组。

       类似的,以下语句可以在栈里放置一个Table,但这个TableUiBot中被识别为一个字典:

luaL_dostring(L, "return BasicLib.NewTable(2)");

15.    插件编写完成后,对其进行编译,会生成一个名为 插件名称.so的文件。把这个文件复制到UiBotextend\lua_mod目录中即可。

16.    UiBot中如下书写,即可调用插件中的add函数(假设插件名称为MyPlugin):

Import MyPlugin

Dim result = MyPlugin.add(100, 200)


上传的附件:
最新回复 (9)
  • luo 2019-1-17
    2
    附件为UiBot的C/C++语言插件模板
  • dkli 2019-2-7
    3
    你们怎么这么厉害(扣脑壳)
  • 黄生_324907 2020-6-19
    4
    就是通过lua与c++的交互来写C++方法,uibot的开发者也太偷懒了
  • 李_404527 2021-6-18
    5
    没搞成功,就是直接把附件的模板编译后放入UIbot的lua_mod目录也不能使用,调用时显示“模块没有加载成功”。UIbot版本5.30
  • 李_404527 2021-6-18
    6
    接上,
    uibot报错内容:[11:13:25]流程块3.task 第1行:模块加载中发生错误:Lua加载错误:加载“LUAPLUGIN”模块失败从文件“C:/UIBOT/UiBot Creator Community (x64)/extend/lua_mod//LUAPLUGIN.so”:
    %1 ������Ч�� Win32 Ӧ�ó���
    [11:13:25]流程块3.task 第1行:模块 LuaPlugin 没有加载成功
  • 隨筆塗鴉 2021-6-18
    7
    Python 开发扩展不香吗(逃
  • 李泓科 2022-3-27
    8
    [2022-3-27 14:20:17] [ERROR] 流程块1.task 第1行:模块加载中发生错误:Lua加载错误:加载“MYPLUGIN”模块失败从文件“C:/Program Files/UiBot Community/6.0.0.211215/extend/lua_mod//MYPLUGIN.so”:
           %1 ������Ч�� Win32 Ӧ�ó���
    [2022-3-27 14:20:17] [ERROR] 流程块1.task 第1行:模块 MyPlugin 没有加载成功
    [2022-3-27 14:20:17] [ERROR] 流程块1.task 第2行:模块加载中发生错误:Lua加载错误:加载“MYPLUGIN”模块失败从文件“C:/Program Files/UiBot Community/6.0.0.211215/extend/lua_mod//MYPLUGIN.so”:
           %1 ������Ч�� Win32 Ӧ�ó���
    [2022-3-27 14:20:17] [ERROR] 流程块1.task 第2行:模块 MyPlugin 没有加载成功

    也是这个问题

  • +86 152******39 7月前
    9
    我用 Visual Studio 2022 按照操作 运行 提示不是有效的win32应用程序 应该怎么解决呢?
  • 生产队的驴 6月前
    10
    同问,使用Visual Studio 2022编译的so库加载不了
    [2023-10-24 21:41:04] [ERROR] 流程块.task 第2行:模块加载中发生错误:Lua加载错误:加载“TEST”模块失败从文件“C:/Program Files/UiBot Community/6.0.1.220629/extend/lua_mod//TEST.so”:
           %1 ������Ч�� Win32 Ӧ�ó���
    [2023-10-24 21:41:04] [ERROR] 流程块.task 第2行:模块 test 没有加载成功
返回
发新帖