- 博客(43)
- 资源 (5)
- 收藏
- 关注

原创 自定义脚本引擎 - 数组、字符串 分片操作
数组、字符串支持分片操作[start : end : step]与python不同,结果含end索引的数据,我认为它是一个闭区间。step为负数:倒序[:],[::] 深层拷贝[::-1] 倒序拷贝[:5] 从拷贝索引为0-5(含)元素[1:3] 拷贝索引从1到3(含)的数据[1:10:2] 间隔为2拷贝[3:-1] 从索引3开始拷贝所有的数据[3:] 从索引3开始拷贝所有的数据[3::-1] 从索引3开始,倒序取数据直到索引0(含)[:5:-1] 从最后一个,倒序取数据直到索引5(
2021-01-08 18:46:40
150
1

原创 自定义脚本引擎 - 数据交换
提供类似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
210

原创 自定义脚本引擎 - 调用系统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
254

原创 自定义脚本引擎开发纪实 - 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
490

原创 自定义脚本语言引擎开发纪实 - 类的嵌套
类的嵌套类的实现内部,可以再包含类的定义,称之为嵌套类类的实现内部,可以再包含类的定义,称之为嵌套类备注:访问嵌套类的全局变量,需要嵌套类的全路径,见下面的例子。class animal func __init__(self, type) self.type = type end func __del__(self) end class bird func __in...
2019-03-28 18:05:41
240

原创 自定义脚本语言引擎开发纪实 -类的继承(类似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
215

原创 自定义脚本语言引擎开发纪实 - 面向对象(class)
脚本定义类,语法借鉴了python定义类的语法构造函数__init__析构函数__del__类对象函数类变量(类全局变量)类函数(类全局函数)(第一参数不是self的就归为类全局函数)完整的自定义类实例定义类的语法class childendclass构造函数__init__ func __init__(self, name, age) self.name = name se...
2019-03-28 14:12:27
349

原创 自定义脚本语言引擎开发纪实 - 实例化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
1151

原创 自定义脚本语言引擎开发纪实 -解析xml格式数据
解析xml备注xml例子脚本代码执行结果备注脚本引擎会把xml转化为k-v对。不过xml的data是没有key即属性名的,引擎会给他设置为属性self$data的值xml例子<Doc> <sid> <product id="10236&am
2019-02-27 19:43:59
551

原创 自定义脚本语言引擎开发纪实 -操作json格式数据
操作Json要解析的json数据脚本代码json再转字符串要解析的json数据{ "errno":0, "errmsg":"Success", "data":{ "banner":[ { "pid":"329", "name&qu
2019-02-26 19:32:50
1304

原创 自定义脚本引擎开发纪实 - 自定义脚本函数
自定义脚本函数,实现功能代码示例://自定义函数,多返回值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
517

原创 自定义脚本引擎开发纪实 - 结构体
结构体这里的结构体指的是C/C++语言的结构体:就是一个buffer和各个变量的偏移。结构体的字节对齐这个大家都清楚,不清楚的就看看书吧,实在不想码字。脚本描述的结构体转化为buffer字节对齐:pack取值可以为1,2,4,8根据变量的类型,分别计算各个变量的大小还有在对其字节后的偏移即可。宿主语言的buffer根据脚本描述的结构体访问其中的变量这一步离不开上面那一步。其实也都是...
2019-02-11 18:56:46
315

原创 自定义脚本引擎开发纪实 - 全局变量与局部变量和弱类型
变量的作用域和弱类型变量局部变量全局变量变量的回收(gc)弱类型变量变量的作用域涉及到变量的作用范围,可见性,还涉及到变量的回收。局部变量局部变量需要明确的使用local修饰;ret=1 //全局变量func isvalid() ret = ret + 1 //使用的是全局变量 local ret = 0 //局部变量 return ret //返回的是局部变量0end...
2019-02-11 18:34:41
245

原创 自定义脚本引擎开发纪实 -前序
自定义脚本引擎开发纪实前序要实现的脚本引擎具有的特性缘由前序大家可能对JavaScript,VBScript,Python,Lua,Shell等脚本语言并不陌生,有时候也对Swift语言的特性表现出很大的兴趣。大家在乐此不彼的使用这些语言的时候,有没有想过要自己实现一个脚本引擎呢?(拜托,自己写的能跟那些成熟的比吗?!)话一点错没有,不过通过自己一步步实现一个引擎,从中可以学到不少的知识,也能...
2018-11-25 14:11:10
3404
2
原创 自定义脚本引擎 -字符串
字符串每个字符串变量是一个类对象,提供了属性,方法在对字符串进行操作。字符串拼接、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
166
原创 自定义脚本引擎 - 自定义异常二
实现类来抛出异常//exception class//部分语法很像python,哈哈,参考参考class myexcept func __init__(self, err, message) self.err = err self.message = message end func __del__(self) endendclass使用try throw my...
2019-11-18 20:54:04
141
原创 自定义脚本引擎 - 自定义异常一
自定义异常为了方便抛出异常,你可以选择自定义一个异常的类。如果你的异常足够简单,一个数字,一个字符串就满足,那么就简单的来。支持直接抛出数字或者字符串作为异常的值传递。try i = 5 try if(i == 5) then throw "equal five" end except "equal five": //"equal five"的异常在这里被捕捉 ...
2019-11-18 20:48:37
157
原创 自定义脚本引擎 -异常一
异常机制很多种语言都有抛异常和捕捉异常的机制,从而可以尽可能的避免运行时的意外,另外的好处还有可以避免做很多前置的判断。语法try ...except exception1: ...except e2,e3: ...except ...: 其他的异常都在这里捕捉,类似c++中的catch(...)finally ...end与python的不同是没有else字段,自我...
2019-11-18 20:40:04
207
原创 自定义脚本引擎 - 类示例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
385
原创 自定义脚本语言引擎开发纪实 - 多线程及线程同步
多线程及线程同步线程类 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
341
原创 自定义脚本语言引擎开发纪实 -文件依赖与作用域
文件依赖引入依赖文件文件中定义的全局变量的作用域文件中函数的可见性例子引入依赖文件小的内嵌式的功能模块,一个文件搞定,但如果功能比较多,或者一些好的函数需要沉淀,保存成公共模块的文件,此时就需要引入依赖文件。引入模块语法文件寻找路径的方式是基于当前正在运行的目录为相对目录。import("mm.script") //模块名为mm另一种方式:import("mm.script" : ...
2019-03-08 14:35:03
162
原创 自定义脚本语言引擎开发纪实 -保存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
176
原创 自定义脚本引擎开发纪实 - 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
332
原创 自定义脚本引擎开发纪实 - 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
262
原创 自定义脚本引擎开发纪实 - 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
295
原创 自定义脚本引擎开发纪实 - 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
196
原创 自定义脚本引擎开发纪实 - 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
291
原创 自定义脚本引擎开发纪实 - 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
280
原创 自定义脚本引擎开发纪实 -调用内置属性和函数
示例代码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
206
原创 自定义脚本引擎开发纪实 -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
318
原创 自定义脚本引擎开发纪实 - 调用第三方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
372
原创 自定义脚本引擎开发纪实 -逆波兰求值
@[TOC]自定义脚本引擎开发纪实第一章脚本语言的特点,咱们不再赘述了。自定义的脚本引擎还有许多亟待优化的地方,不过不碍我们讲解如何实现自定义脚本引擎。本人呢,代码水平很菜,肯定会出现很多的错误,大家发现了呢,可以随手在自己实现的过程中改了,顺带给我提个醒儿,这儿先谢谢您呐!同时呢,这个是优化前的代码,自己可以用更高效的方法改写,提高效率。下面会把自己当时写的验证demo,贴出来,那是我的...
2018-12-10 14:36:53
247
原创 UIPro实例讲解之QQ2014 UI模仿系列五 - 聊天气泡
UIPro的宗旨是:让Windows UI开发像写小网页一样简单!猜测了下QQ的气泡模式的实现方法:分为两层,上面一层是windowless richedit, 透明模式;下面一层一个容器,包含有用户头像和气泡图片;下面一层随richedit一起滚动。添加每一个paragraph后,可以得到这个段落的rang的左上角和右下角,从而得到该paragraph所在的矩形区域rect。然后就在
2014-08-01 18:26:27
1458
原创 UIPro实例讲解之QQ2014 UI模仿系列一
UIPro的宗旨是:让Windows UI开发像写小网页一样简单!从高中时代开始,QQ一直伴随着我,一直觉得QQ的UI都是那么的漂亮,说实话,细节处理的真好。QQ自然成了我模仿的对象。一直想模仿,但手上缺少一个强大灵活的UI库,直到现在,UIPro的出现,才让我又拾起那个想法,编写这个QQCopy的demo。在该系列的最后一讲,会附上源码哦!UIPro的配置文件分为两个,一个是re
2014-07-22 11:53:04
963
原创 UIPro 实例讲解一 商业级手机快速检测平台
手机快速检测平台,是一个对插入USB链接电脑后的手机,进行病毒查杀,手机信息查询,手机APP管理的一个软件,界面简单明了,用UIPro开发起来也比较方便!闲话不再赘述,上图:一、手机未连接这是一个轮播图,共三页,要实现这样的界面,在ui.xml中编写如下:
2013-12-15 11:07:31
740
原创 UIPro 一个DirectUI库
UIPro 一个新的DirectUI库先贴出一个使用UIPro开发的一个模仿QQ的界面效果:【不需要编写代码,只需要写xml文件即可,使用相对布局】利用一些周末时间还有假期时间,写了一个DirectUI库,我取名为UIPro。1. 整个工程是以工厂模式展开,UI Control都是windowless,非窗口模式。2. 对库的编译控制,目前是通过宏开关进行的控制。一:目前实现...
2012-06-03 15:35:51
1796
转载 new 、operator new 和 placement new 区别
<br /> 在我们阅读STL的代码的时候,经常会看到如下的代码:<br />template<class _T1, class _T2> inline<br /> void _Construct(_T1 _FARQ *_P, const _T2& _V)<br /> {new ((void _FARQ *)_P) _T1(_V); }<br /> <br />这个new ((void _FARQ *)_P) _T1(_V); 好奇怪啊,如果我们调试进去,回看到如下的实现:<br />#ifndef
2010-10-26 17:59:00
1314
QQ2104 UI 模仿
2014-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人