aardio - 封装库时批量处理属性与回调函数的方法

关于封装库时批量处理属性与回调函数的方法,在

《 Aardio - 回调函数的方法解析_卢光庆的博客-CSDN博客_aardio函数手册 》

一文中提及,就是所谓的“光庆回调法”

因上文中没有一整套系统的示例代码,只看代码片段,可能比较难理解,所以应部分aardio朋友需求,在此整理了一套具体示例代码,以供参考:

一、dll中的处理方法:

    以易语言为例:

二、aardio中进行声明与调用的方法:

import console; 

var dll = ..raw.loadDll("/test.dll");

//定义设置属性的函数
var setp = dll.api("setProp","bool(string,string)")
setProp = function(prop,v){ //因为易语言编译的dll为ansi编码,所以传递参数时要进行转码。
	if type(v)=type.table v=..table.tostring(v);
	return setp(..string.fromto(prop,65001,0),..string.fromto(tostring(v),65001,0)); 
}

//定义获取属性的函数
var getp = dll.api("getProp","ptr(string)")
getProp = function(prop){ //因为易语言编译的dll为ansi编码,所以传递参数时要进行转码。
	var str = ..raw.str(getp(..string.fromto(prop,65001,0)));
	str = ..string.fromto(str,0,65001);
	return eval(str); 
}

//定义回调函数
var callback = function(funcname,param){
	funcname = ..string.fromto(funcname,0,65001);
	if console[funcname] return console[funcname](..table.unpack(eval(..string.fromto(param,0,65001))));
}
var _stdfunc = ..raw.tostdcall(callback,"int(string,string)");
dll.setcallback(tonumber(..raw.toPointer(_stdfunc)));


//*******************开始测试

//测试属性
//理论上来说,多少属性都可以,在aardio里不用逐个处理。在dll中处理好就可以。

setProp("prop1","我是文本型属性") 			//文本
setProp("prop2",123456) 					//数值
setProp("prop3",true)						//逻辑
setProp("prop4",{123,{1,2,3},"abc",true}) 	//数组

console.dump(getProp("prop1"),  type(getProp("prop1")))
console.dump(getProp("prop2"),  type(getProp("prop2")))
console.dump(getProp("prop3"),  type(getProp("prop3")))
console.dump(getProp("prop4"),  type(getProp("prop4")))

//测试回调
//定义三个aardio回调函数,关键是这三个回调函数并未转为stdcall,而是通过一个callback回调函数执行。
//理论上来说,多少回调函数都可以,在aardio里不用逐个处理。在dll随便调用即可。

console.func1 = function(v){
	console.dump("回调执行============",'\n',v)
}

console.func2 = function(v){
	console.dump("回调执行============",'\n',(v*10)+567)
}

console.func3 = function(a,b,c,d){
	console.dump("回调执行============",'\n',a,(b+1)*1123,c,!c,d,d[2])
}
//模拟回调,调用三个回调函数
dll.testcallback()


console.pause(true);
fsys.remove()

三:代码下载:

光庆回调法演示.rar - 蓝奏云

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值