当前位置:网站首页>Aardio - 封装库时批量处理属性与回调函数的方法
Aardio - 封装库时批量处理属性与回调函数的方法
2022-07-06 14:39:00 【卢光庆】
关于封装库时批量处理属性与回调函数的方法,在
《 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()
三:代码下载:
边栏推荐
- Oracle-控制文件及日志文件的管理
- 小常识:保险中的“保全”是什么?
- [sdx62] wcn685x will bdwlan Bin and bdwlan Txt mutual conversion operation method
- Management background --5, sub classification
- 中国固态氧化物燃料电池技术进展与发展前景报告(2022版)
- Data storage (1)
- 2500 common Chinese characters + 130 common Chinese and English characters
- 做接口测试都测什么?有哪些通用测试点?
- qt quick项目offscreen模式下崩溃的问题处理
- 重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
猜你喜欢
Embedded common computing artifact excel, welcome to recommend skills to keep the document constantly updated and provide convenience for others
[MySQL] online DDL details
Management background --3, modify classification
Data processing skills (7): MATLAB reads the data in the text file TXT with mixed digital strings
Memorabilia of domestic database in June 2022 - ink Sky Wheel
网络基础入门理解
基于 QEMUv8 搭建 OP-TEE 开发环境
Classic sql50 questions
GPS从入门到放弃(十四)、电离层延时
每日一题:力扣:225:用队列实现栈
随机推荐
GPS from getting started to giving up (12), Doppler constant speed
Assembly and interface technology experiment 5-8259 interrupt experiment
GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)
[sdx62] wcn685x will bdwlan Bin and bdwlan Txt mutual conversion operation method
GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)
自制J-Flash烧录工具——Qt调用jlinkARM.dll方式
The SQL response is slow. What are your troubleshooting ideas?
Force deduction question 500, keyboard line, JS implementation
GPS从入门到放弃(十四)、电离层延时
Oracle-控制文件及日志文件的管理
2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks
网络基础入门理解
GPS from getting started to giving up (XX), antenna offset
2022年6月国产数据库大事记-墨天轮
2021 geometry deep learning master Michael Bronstein long article analysis
Oracle control file and log file management
Adjustable DC power supply based on LM317
在IPv6中 链路本地地址的优势
[MySQL] online DDL details
How does the uni admin basic framework close the creation of super administrator entries?