脚本引擎
文章平均质量分 58
lvxb_tiger
专注DirectUI界面解决方案,专注客户端程序架构
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自定义脚本引擎 - 数据交换
提供类似python数据交换的语法糖支持任意数量(count >=2)的数据交换普通数据交换形如:X1, X2,…,Xn = Xm,Xa,…,Xb例子(5个数据交换):a=100b=200c=300d=400m=500a,b,c,d,m=b,m,a,d,cos.debug.box(a)os.debug.box(b)os.debug.box(c)os.debug.box(d)os.debug.box(m)数组间交换 a=[1,2,3] b=[4,5,6]原创 2021-01-06 21:41:27 · 248 阅读 · 0 评论 -
自定义脚本引擎 - 调用系统dll函数
调用windows系统dll来枚举部分设备代码例子如下:func enum_hid() //定义结构体描述,安照C++的结构体写 //定义个结构体类型 local GUID = defstruct() GUID.Data1 = "ui4" GUID.Data2 = "ui2" GUID.Data3 = "ui2" GUID.Data4 = "byte[8]" local SP_DEVINFO_DATA = defstruct() SP_DEVINFO_DATA.cbSize="u原创 2020-12-09 21:57:04 · 290 阅读 · 0 评论 -
自定义脚本引擎 -字符串
字符串每个字符串变量是一个类对象,提供了属性,方法在对字符串进行操作。字符串拼接、str = "my name is" + "yew."who="who are you?"data = who + strdata.append("haha")输出:字符串格式化(key:对应sprintf中的字段)例如:(name:s),会从format参数中找key为name的值,字...原创 2019-12-16 21:13:09 · 188 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 -保存xml格式数据
保存xml个数数据(即:object转为xml格式字符串)object转xml示例代码演示手动构造object,并转为xml上述k-v对转成xml的代码按上文的例子【接上文】object转xml上个例子,我们把xml字符串转为了object(转成object的时候,会把根节点扔掉)。这个例子,我们再把object转成xml(需要指定一个根节点)示例代码xmlDoc="<Doc&g.原创 2019-03-01 15:21:16 · 204 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 -操作json格式数据
操作Json要解析的json数据脚本代码json再转字符串要解析的json数据{ "errno":0, "errmsg":"Success", "data":{ "banner":[ { "pid":"329", "name&qu原创 2019-02-26 19:32:50 · 1338 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 -文件依赖与作用域
文件依赖引入依赖文件文件中定义的全局变量的作用域文件中函数的可见性例子引入依赖文件小的内嵌式的功能模块,一个文件搞定,但如果功能比较多,或者一些好的函数需要沉淀,保存成公共模块的文件,此时就需要引入依赖文件。引入模块语法文件寻找路径的方式是基于当前正在运行的目录为相对目录。import("mm.script") //模块名为mm另一种方式:import("mm.script" : ...原创 2019-03-08 14:35:03 · 191 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 - 实例化C++实现类的对象和调用对象的方法
使用C/C++类脚本支持自定义类别,如果引擎内部使用c/c++类,脚本里面可以与类对象函数交互脚本支持自定义类别,如果引擎内部使用c/c++类,脚本里面可以与类对象函数交互例子v={name="xiaoming", age=19, size = 1, child={t=1,2,3,4,5}}c=v.size() //获取v的个数x = v.child.size() //获取v的chil...原创 2019-03-11 21:56:31 · 1206 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 - 多线程及线程同步
多线程及线程同步线程类 thread(c++实现)事件 event (c++实现)互斥量 Mutex (c++实现)线程类 thread(c++实现)_thread = thread($G:__callback__,$G:__engine__,"_thread")_thread.ext="text"_thread.sum=10//开启的线程执行mm.script中的逻辑_thread....原创 2019-03-26 17:40:06 · 371 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 - 面向对象(class)
脚本定义类,语法借鉴了python定义类的语法构造函数__init__析构函数__del__类对象函数类变量(类全局变量)类函数(类全局函数)(第一参数不是self的就归为类全局函数)完整的自定义类实例定义类的语法class childendclass构造函数__init__ func __init__(self, name, age) self.name = name se...原创 2019-03-28 14:12:27 · 401 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 -类的继承(类似python)
类的继承单继承例子多继承(继承类似python)单继承例子class stature func __init__(self, height) self.height = height end func __del__(self) end func GetHeight(self) return self.height endendclassclass child(s...原创 2019-03-28 17:21:57 · 241 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 - 类的嵌套
类的嵌套类的实现内部,可以再包含类的定义,称之为嵌套类类的实现内部,可以再包含类的定义,称之为嵌套类备注:访问嵌套类的全局变量,需要嵌套类的全路径,见下面的例子。class animal func __init__(self, type) self.type = type end func __del__(self) end class bird func __in...原创 2019-03-28 18:05:41 · 265 阅读 · 0 评论 -
自定义脚本引擎 - 类示例demo
类的示例demo请求一个url,可以设置是否请求天气,广告,信息流的信息(url中有相应的参数字段),返回结果是json。下面代码是定义了一个类CQueryServer,构造函数有三个参数,分别对应上面的信息。原谅我把url改成了无效的类定义如下:class CQuerySvr url="http://xxx.xxx.xxx.xxx/popwnd/newa?&m2=" + js....原创 2019-04-09 12:51:10 · 411 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - struct的pack和unpack(注意与python的不同)
struct实际例子calcsize方法calc_offset_len方法unpack方法pack方法在处理网络数据时,比如tcp包字节流的时候,需要pack/unpack。这里采用的方式和python不同。设计的初衷是:在C/C++中对元素的访问和在脚本中保持一致。比如:c/c++代码//c/c++访问方式struct user{ char name[10]; int id;...原创 2019-05-10 19:11:46 · 539 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - foreach语法
foreach语法语法处理key-value的例子处理数组的例子(元素随意)语法foreach(k,v in object) 执行体end//如果是一个变量,忽略key,只取value,用于处理数组foreach(v in object) 执行体end处理key-value的例子dataValue={key="m1", data="pp1", sign="p23m", chi...原创 2019-02-25 18:52:42 · 363 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - for语法
for语法语法例子1例子2语法for (var=exp1,exp2,exp3) <执行体> end //如果缺失exp3,exp3默认为1for (var=exp1,exp2) <执行体> end 例子1func Test() for(i=1,i<5) js.debug.log("[script] " + i) enden...原创 2019-02-25 18:38:51 · 300 阅读 · 0 评论 -
自定义脚本引擎开发纪实 -逆波兰求值
@[TOC]自定义脚本引擎开发纪实第一章脚本语言的特点,咱们不再赘述了。自定义的脚本引擎还有许多亟待优化的地方,不过不碍我们讲解如何实现自定义脚本引擎。本人呢,代码水平很菜,肯定会出现很多的错误,大家发现了呢,可以随手在自己实现的过程中改了,顺带给我提个醒儿,这儿先谢谢您呐!同时呢,这个是优化前的代码,自己可以用更高效的方法改写,提高效率。下面会把自己当时写的验证demo,贴出来,那是我的...原创 2018-12-10 14:36:53 · 289 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - 全局变量与局部变量和弱类型
变量的作用域和弱类型变量局部变量全局变量变量的回收(gc)弱类型变量变量的作用域涉及到变量的作用范围,可见性,还涉及到变量的回收。局部变量局部变量需要明确的使用local修饰;ret=1 //全局变量func isvalid() ret = ret + 1 //使用的是全局变量 local ret = 0 //局部变量 return ret //返回的是局部变量0end...原创 2019-02-11 18:34:41 · 273 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - 结构体
结构体这里的结构体指的是C/C++语言的结构体:就是一个buffer和各个变量的偏移。结构体的字节对齐这个大家都清楚,不清楚的就看看书吧,实在不想码字。脚本描述的结构体转化为buffer字节对齐:pack取值可以为1,2,4,8根据变量的类型,分别计算各个变量的大小还有在对其字节后的偏移即可。宿主语言的buffer根据脚本描述的结构体访问其中的变量这一步离不开上面那一步。其实也都是...原创 2019-02-11 18:56:46 · 365 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - 调用第三方dll
调用framework和第三方开发的dll宿主语言相关这里根据C/C++编译器来说。对函数的调用有__cdecl,__stdcall 等等(其他的不列举了,因为目前只支持对这两种的调用,其他的还要花时间去实现)eg: 调用user32.dll的MessageBoxWret = js.dll.stdcall(&quot;user32.dll&quot;, &quot;MessageBoxW&quot;, {&quo原创 2019-02-11 19:10:16 · 399 阅读 · 0 评论 -
自定义脚本语言引擎开发纪实 -解析xml格式数据
解析xml备注xml例子脚本代码执行结果备注脚本引擎会把xml转化为k-v对。不过xml的data是没有key即属性名的,引擎会给他设置为属性self$data的值xml例子&amp;amp;lt;Doc&amp;amp;gt; &amp;amp;lt;sid&amp;amp;gt; &amp;amp;lt;product id=&amp;quot;10236&am原创 2019-02-27 19:43:59 · 591 阅读 · 0 评论 -
自定义脚本引擎开发纪实 -调用内置属性和函数
示例代码os, sp =js.system.ver //获取内置属性,版本号和service packjs.debug.p("os", "sp") //打印变量的值file_exist=js.file.exist("%windir%\\System32\\notepad.exe")js.debug.p("file_exist")执行结果:...原创 2019-02-18 19:26:24 · 235 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - 自定义脚本函数
自定义脚本函数,实现功能代码示例://自定义函数,多返回值func GetSystemVerAndSP() local os, sp = js.system.ver return os, sp, 100endos, sp, test = GetSystemVerAndSP()js.debug.p("os", "sp", "test") //打印变量的值执行结果:...原创 2019-02-18 19:32:04 · 550 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - if语法
if语法示例if( 布尔表达式 1)then 在布尔表达式 1 为 true 时执行该语句块elseif( 布尔表达式 2)then 在布尔表达式 2 为 true 时执行该语句块elseif( 布尔表达式 3)then 在布尔表达式 3 为 true 时执行该语句块else 如果以上布尔表达式都不为 true 则执行该语句块end跟lua很像原创 2019-02-19 10:43:35 · 306 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - goto语法
goto语法示例代码//goto语法goto label;...@label@...***不能跨越block,解释行的语言,不适合处理跨block的跳转,会造成执行过程中的堆栈,eip等错乱***示例代码跳过输出 第二行func Do() js.debug.log("script - 第一行") goto next js.debug.log("script - 第二行"...原创 2019-02-19 11:47:02 · 318 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - while语法
while语法语法示例代码语法while(condition)执行体end示例代码执行到i为4不打印log,执行i为6退出循环(打印:1,2,3,5)i=0while(i<7) i=i+1 if(i == 4) then continue elseif(i == 6) then break end js.debug.log("script 打印i:" +...原创 2019-02-19 12:00:50 · 221 阅读 · 0 评论 -
自定义脚本引擎开发纪实 -object k-v对
实现key-value对,支持嵌套单层的k-vkeyValues={caption="这是标题", text="这是内容", Flags=0x24}ret = js.dll.stdcall("user32.dll", "MessageBoxW", {i4=0,wsz=keyValues[text], wsz=keyValues.caption, i4=keyValues.Flags},i4)...原创 2019-02-14 12:07:23 · 359 阅读 · 0 评论 -
自定义脚本引擎开发纪实 - switch语法
switch语法语法和for一块使用的例子语法switch(var)case 1:break;case 2:break;case 3,4,5: //为3,为4,为5时满足条件break;case …:end也可以是字符串switch(str)case “abc”:break;case “123”,“456”:执行体break;case …:end注意:cas...原创 2019-02-25 18:25:12 · 338 阅读 · 0 评论 -
自定义脚本引擎开发纪实 -前序
自定义脚本引擎开发纪实前序要实现的脚本引擎具有的特性缘由前序大家可能对JavaScript,VBScript,Python,Lua,Shell等脚本语言并不陌生,有时候也对Swift语言的特性表现出很大的兴趣。大家在乐此不彼的使用这些语言的时候,有没有想过要自己实现一个脚本引擎呢?(拜托,自己写的能跟那些成熟的比吗?!)话一点错没有,不过通过自己一步步实现一个引擎,从中可以学到不少的知识,也能...原创 2018-11-25 14:11:10 · 3490 阅读 · 2 评论
分享