PowerBuilder编程新思维1,PowerBuilder编程新思维2

作者: 编程技术  发布:2019-09-20

前言

PowerBuilder作为开荒工具退出一线行列已经十分久了,在二〇一八年来谈那样一款老旧的编制程序工具是或不是有含义?诚然,PB有着太多硬伤,但仍旧有它的用武之地的。并且明天讲的这些“新构思”大多数内容是本人在任哪个地方方未有见过的,包蕴部分相比新的思量,但愿能够给诸位读者带来面目一新的以为和有价值的参阅。

由于内容很多,准备合起来作为三个库,名字叫PowerPlume,中文为“孔雀翎”,古龙先生书中一挥而就又赏心悦指标枪杆子。

PowerBuilder编制程序新思虑2:嵌入(Thread二十四线程)

在PB中选取多线程,在英特网有大量的稿子介绍。不过深刻钻研并试着提交更易用的模子的,近日还唯有"路人甲cw"的一篇《关于PowerBuilder二十多线程的局地感受》。

因为PB八线程有着广大天赋的范围,使用中有无数难点,那么简化模型是个自然的大方向。由于大家引入了LUA脚本,使得四线程模型变得意想不到的简要。

PowerBuilder编制程序新构思1:扩大

PB环境是查封的,导致有个别部分的力量极弱,信赖开垦各样DLL和增添。把脚本语言引擎引进到PB中,有着相当多的现实意义,最大的功利就是能够一贯采纳脚本语言的各样财富与源码,不用再另行支付。

广大的脚本语言有JS、Python、Ruby等,为何选拔Lua?因为小、因为快。JS由于历史原因,太强大了。Python和Ruby亦非很精妙。况兼情况布置复杂。Lua小巧,接口也很团结,能源也加多。

接口方面,选用PBNI并不是直接使用DLL,是因为供给管理局地指南针和支撑PowerObject,总体与LuaApi基本一致。

global type n_lua from nonvisualobject native "pblua105.dll"public function long register(string name, powerobject obj)public function long setglobal(string name)public function long getglobal(string name)public function long setfield(long idx, string key)public function long getfield(long idx, string key)public function long pushnil()public function long pushboolean(boolean value)public function long pushlong(long value)public function long pushdouble(double value)public function long pushstring(string value)public function long pushpowerobject(powerobject value)public function long toboolean(long idx, ref boolean value)public function long tolong(long idx, ref long value)public function long todouble(long idx, ref double value)public function long tostring(long idx, ref string value)public function long topowerobject(long idx, ref powerobject value)public function boolean isboolean(long idx)public function boolean islong(long idx)public function boolean isdouble(long idx)public function boolean isstring(long idx)public function boolean ispowerobject(long idx)public function boolean isnil(long idx)public function boolean istable(long idx)public function long spop(long n)public function long scopy(long idx)public function long sinsert(long idx)public function long sremove(long idx)public function long sreplace(long idx)public function long sgettop()public function long createtable(long arr, long rec)public function long settable(long idx)public function long gettable(long idx)public function long setmetatable(long idx)public function long nextkey(long idx)public function long docall(long args, long results)public function long dofile(string path)public function long dostring(string str)public function long enablecall(boolean ui)end type

首先达成的意义是在Lua中很简单,PB却不可能提供的法力——HashTable。

实例:function integer of_map_set (string as_table, string as_key, powerobject an_value)

在Lua接口基础上,增添了pushpowerobject这么些接口,以拍卖PB对象。

int retret = api.getglobalif (ret = LUA_TNIL) then    api.createtable(0, 0);elseif (ret <> LUA_TTABLE) then    return FAILUREend ifapi.pushstringapi.pushpowerobjectapi.settable(-3);if (ret = LUA_TNIL) then    api.setglobalend ifreturn SUCCESS

补助,必需采取Lua中相比成熟的能源,能够在

实例:使用cjson模块分析json

 1 string res 2  3 i_lua.api.dostring("return require") 4 i_lua.api.pushstring('decode') 5 i_lua.api.gettable(-2) 6  7 if (not i_lua.api.isfunction(-1)) then 8     messagebox("","error") 9 end if10 11 i_lua.api.pushstring(mle_json.text)12 i_lua.api.docall(1,1)13 14 i_lua.api.pushstring("sites")15 i_lua.api.gettable(-2)16 17 string key,val18 integer idx19 idx = i_lua.api.sgettop()20 21 i_lua.api.pushnil()22 do while i_lua.api.nextkey<>023     i_lua.api.pushstring("name")24     i_lua.api.gettable(-2)25     i_lua.api.tostring(-1, val)26     i_lua.api.spop(2)27     tv_1.InsertItemFirst(0,val,1)28 loop29 30 i_lua.api.spop(3)

另外,在创设PowerPlume这个库的时候,全体架构在Lua这么些模块之上,首假诺利用其HashTable这几个功能。

PB线程模型

原先的PB线程,信赖于SharedObjectRegister,SharedObjectGet,SharedObjectUnRegister八个函数。依次创设Thread和Callback多少个nv对象。那使得三八线程的运用支付变得一点都不小。

效果及源码

图片 1

源码:PowerPlumeDemoV0.1.1.rar

提供了PB10.5 PB11.5 PB12.5多个本子

<本节完>

异步调用模型

咱俩得以参见一下Socket的异步模型,调用统一为五个接口,重返时使用Event事件传递数据。

举例如下接口:thread.of_execute("pb.f_func,作为异步调用的独一接口,在OnResult事件中接收数据。

那就提议了贰个新主题材料:要求拥有在Lua中调用PB的力量。

图片 2

PB的CALLBACK模型

在剧本脚言中调用宿主程序,须求设计Embed嵌入式CALLBACK接口。能够丰硕利用LUA的动态个性,实现指标的惰性绑定。

 1 //============================================ 2 //对象调用说明 3  4 //调用func函数 5 obj.func 6 //调用指定sign签名的func函数 7 obj.func.call(sign, arg...) 8  9 //调用evt事件10 obj.evt.send11 //调用指定sign签名的evt事件12 obj.evt.sendto(sign, arg...)13 14 //属性获取15 obj.prop.get()16 //属性设置    17 obj.prop.set18 19 //============================================20 //全局变量访问21 22 //全局变量var获取23 pb.global.var.get()24 //全局变量var设置25 pb.global.var.set26 27 //shared变量var获取28 pb.classname.var.get()29 //shared变量var设置30 pb.classname.var.set31 32 33 //============================================34 //全局与类函数访问35 36 //调用全局func函数37 pb.global.func38 //调用指定sign签名的func函数39 pb.global.func.call(sign. arg...)40 41 //调用系统func函数42 pb.system.func43 //调用指定sign签名的系统func函数44 pb.system.func.call(sign, arg...)45 46 //调用classname类func函数47 pb.classname.func48 //调用指定sign签名的func函数49 pb.classname.func.call(sign, arg...)50 51 52 //============================================53 // 创建与销毁54 55 //创建classname对象obj56 pb.classname.obj.create57 //创建classname窗口win58 pb.classname.win.open59 60 //对象销毁61 obj.destroy()62 //关闭窗口63 obj.close()

PB的CALLBACK实例

图片 3

异步调用实例

只需一行代码,达成八线程的异步调用:

i_thread.of_execute(sle_async, "return pb.global.f_amount")

图片 4

顺手说一句,Lua(陆仟001可怜结果)的施行进度还要在PB代码之上,所以不会有怎么着性指斥题。

源码:PowerPlumeDemoV0.2.1.rar

提供了PB10.5 PB11.5 PB12.5四个版本

<本节完>

本文由贝博体育app发布于编程技术,转载请注明出处:PowerBuilder编程新思维1,PowerBuilder编程新思维2

关键词:

上一篇:没有了
下一篇:没有了