首页 > 代码库 > VRP-Lua学习笔记

VRP-Lua学习笔记

 

至于vrp是什么东西以及为什么要学习vrp,vrp的简单操作这些问题请自行右转抵拢倒拐找百度或者去中视典官网去找教程,我这里不会在赘述。

今天默认我们已经会使用VRP的脚本编辑器,用其他语言来为VRP编程实现交互。

VRP支持Lua脚本语言以及官方开放了支持高级语言的SDK(如果你的加密狗支持SDK)。这里我们先来讲讲使用Lua脚本。

关于Lua语法这里不做介绍,想了解的朋友请自行百度。我们主要是通过Lua调用VRP脚本,来简化控制流程让其更符合我们的编程逻辑。

加载lua

在Lua里,可以使用sys.DoScript(“VRP脚本”);函数来调用VRP脚本,下面来举个栗子:

第一步:新建一个后缀名lua文件,这里我叫他:Script.lua,并把他放在VRP文件名_textures这个文件夹下。这是vrp搜索文件时的默认文件夹,在此文件夹下我们可以在调用文件时不必指明路径。但是需要注意的是,对于此文件夹下的文件只能在VRP的脚本编辑器下引用,在Lua环境里使用时,在编辑测试的时候没问题,但是打包的时候资源不会打包进exe文件,这就导致在运行exe文件时出现文件丢失的情况。

第二步:在VRP的初始化函数中加载lua文件:

技术分享

至于句柄随便写,只要在后面执行Lua函数时保持一致即可

第三步:在lua里添加脚本:

技术分享

在函数以外的语句会在系统一开始的时候就运行,类似于这是初始化。但这是个不好的习惯。

技术分享

下面是关于事件触发的,我们先在Lua文件里写好一个函数:

技术分享

再在Control2按钮的点击事件了添加如下脚本:

技术分享

这样当点击Control2按钮时就会执行click函数了:

点击前:技术分享

点击后:技术分享

接下来是传递参数,可以将VRP里的变量作为参数传进Lua的 函数:

在Lua里定义一个带参的函数:

技术分享

“..”符号在lua里是字符串连接符

在VRP的脚本里调用,参数1就是要传入的参数,支持传入两个参数:

技术分享

效果如下:

点击前:技术分享

点击后:技术分享

 

 

 

一些主注意事项

1、 尽量使用lua的局部变量,全局变量太多容易引起全局变量污染导致系统崩溃

2、 你可以使用sys.GetValue("VRP变量名")来获取在VRP脚本里定义的变量的值

3、 在Lua环境里使用的媒体文件必须在vrp编辑器脚本加以引用,否则在编辑测试的时候没问题,但是打包的时候资源不会打包进exe文件,这就导致在运行exe文件时出现文件丢失的情况

4、 注意nil这个类型,Lua属于脚本语言,变量这样不必定义就直接使用,直接使用错误的变量在编译的时候不会报错而在运行的时候却出现许多莫名其妙的错误,当你发现某个代码段不执行的时候你可以看看是不是某个变量为空(nil类型),可以使用type(变量名)函数来看看变量的类型

5、 注意变量的类型,Lua可以根据变量的使用环境自动更改变量的类型,这让人相当头疼,比如你定义了变量i=1,当你使用的时候你不能确定i是string类型还是number类型,可能会出现i>0为假的情况,解决方法是先使用tonumber函数进行转化。

6、 对于数字类型,lua不区分是int、float、double。就是单纯的数字类型。但是由于精度问题会出现相应的问题,比如定义一个变量i=1.1;可能会出现i==1.1为假的情况。解决方法是在比较相等的时候尽量相减,即两个数的差的绝对值接近于0,math.abs((i-1.1))<0.0001,精度根据实际情况取值

7、 VRP与lua的通信做的并不好。由于VRP操作数据库不是很灵活,我想使用Lua来操作数据库。然而并没有效果。恐怕Lua的其他库VRP也没有支持,可怕。

8、 。。。想到再写

VRP-Lua学习笔记